【问题标题】:Pandas Dataframe and Converting DateTime ObjectsPandas Dataframe 和转换 DateTime 对象
【发布时间】:2016-08-01 19:45:25
【问题描述】:

我的数据框中有多个日期时间列,当我将日期时间导出到 csv 时,我需要将日期时间从月/日/年转换为月/年。可以这样做吗?

我正在尝试这个:

if date_mask == "MMM":
    df[name].apply(lambda x: x.strftime('%b %Y'))
else:
    df[name].apply(lambda x: x.strftime('%m %Y'))

当我查看导出的 CSV 时,我仍然看到旧的日期时间值。

关于如何做到这一点的任何想法?

谢谢

############################################ ##############

解决方案

def modify_date(x):
    try:
        if pd.isnull(x) == False:
            return x.strftime('%b %Y')
        else:
            print pd.NaT
    except:
        return pd.NaT

df = pd.DateFrame.from_records(<some list from database>)

df[name] = df[name].apply(modify_date)

感谢大家的帮助!

【问题讨论】:

  • 将其分配回df[name]:df[name] = df[name].apply(lambda x: x.strftime('%m %Y'))
  • 您需要分配apply方法的结果,因为它不会就地修改DataFrame
  • @bernie 我试试看!
  • 您使用哪个应用程序查看 csv 文件(例如 Excel)?是原始 CSV 文件,还是日期解析版本?
  • @bernie 当列值为 NaT (null) 时,它似乎失败了。

标签: python csv datetime pandas


【解决方案1】:

解决方案

def modify_date(x):
    try:
        if pd.isnull(x) == False:
            return x.strftime('%b %Y')
        else:
            print pd.NaT
    except:
        return pd.NaT

df = pd.DateFrame.from_records(<some list from database>)

df[name] = df[name].apply(modify_date)

感谢大家的帮助!

【讨论】:

  • @bernie - 这个答案很慢,我的脚本从 1 分钟到 4 分钟超过 400K 记录,有 6 个日期时间列。关于如何加快速度的任何想法?
  • 这不行吗:df[name] = df[name].dt.strftime('%b %Y')?
  • @ptrj:不是因为他有 NaT。
  • @josh1234:它很慢,因为它是在 Python 中完成的,而不是 C。请参阅此相关答案:stackoverflow.com/a/38711326/42346
  • @bernie 问题是这会处理 NaT(至少在 pandas 0.18.1 中)。如果不是,那么可能是 dtype 有问题,应该先应用pd.to_datetime()
猜你喜欢
  • 2014-05-14
  • 1970-01-01
  • 2015-09-15
  • 2017-01-13
  • 1970-01-01
  • 1970-01-01
  • 2021-03-22
相关资源
最近更新 更多