使用 pandas.to_csv 时如何指定日期格式?

Posted

技术标签:

【中文标题】使用 pandas.to_csv 时如何指定日期格式?【英文标题】:How to specify date format when using pandas.to_csv? 【发布时间】:2012-12-09 14:34:03 【问题描述】:

to_csv()的默认输出格式为:

12/14/2012  12:00:00 AM

我不知道如何只输出特定格式的日期部分:

20121214

或 csv 文件中两个单独列中的日期和时间:

20121214,  084530

文档太简短,无法为我提供有关如何执行这些操作的任何线索。有人可以帮忙吗?

【问题讨论】:

【参考方案1】:

从 Pandas 的 v0.13.0 (January 3, 2014) 版本开始,您可以使用 to_csv 方法的 date_format 参数:

df.to_csv(filename, date_format='%Y%m%d')

【讨论】:

是的,但是有没有办法使用不同的格式存储两个不同的时间戳列?我可以先将它们转换为字符串,然后保存,但是有什么更优雅的吗? 点赞!如果我将 %s 用于 date_format 我不知道为什么时间戳比日期时间值晚 5 小时 30 分钟,我在数据框中的日期时间值已经是 UTC,我该如何转换 2018-06-28 12:15:00+ 00:00 写入 csv 时到 unix 纪元 对我不起作用。我正在尝试保存这个 '%Y-%m-%d'。 W当我打开一个文件时,它被保存为 %Y/%m%d。【参考方案2】:

您可以使用strftime 将这些保存为单独的列:

df['date'] = df['datetime'].apply(lambda x: x.strftime('%d%m%Y'))
df['time'] = df['datetime'].apply(lambda x: x.strftime('%H%M%S'))

然后具体说明要导出到 csv 的列:

df[['date', 'time', ... ]].to_csv('df.csv')

【讨论】:

【参考方案3】:

要导出为时间戳,请执行以下操作:

df.to_csv(filename, date_format='%s')

%s 格式是 not documented in python/pandas,但在这种情况下有效。

我从the dates formats of ruby 中找到了%s。 Strftime doc for C here

请注意,时间戳毫秒格式 %Q 不适用于 pandas(您将在字段中使用 %Q 而不是日期)。我用 python 3.6 和 pandas 0.24.1 刷了我的套装

【讨论】:

要导出毫秒或更精确的微秒,请使用%f 像这样df.to_csv(filename, date_format='%s.%f')

以上是关于使用 pandas.to_csv 时如何指定日期格式?的主要内容,如果未能解决你的问题,请参考以下文章

Pandas.to_csv() 十进制参数

使用 pandas to_csv 仅引用所需的列

如何在 pandas to_csv() 中设置自定义分隔符?

pandas to_csv:将 pandas 写入 csv 时抑制 csv 文件中的科学记数法

Pandas to_csv() 缓慢保存大型数据帧

Python Pandas to_csv,您可以使用.replace()抢先处理双引号转义问题[重复]