如何使用pandas.DataFrame.to_csv写入含毫秒的pandas.Timestamp?
问题
我有一个包含pandas.Timestamp对象列的DataFrame,示例时间戳如下:
pandas.Timestamp('2019-12-10T17:16:49.467000000')
我想通过pandas.DataFrame.to_csv的date_format参数控制输出格式,让生成的CSV文件只保留毫秒而非完整的微秒。我尝试了以下写法:
df.to_csv('!test.csv', sep='\t', index=False, date_format='%d.%m.%Y %H:%M:%S.%f')
但得到的结果是10.12.2019 17:16:49.467000,我需要的格式是10.12.2019 17:16:49.467。
解决方案
因为date_format参数中的%f会固定输出六位微秒数,无法直接通过该参数截断到三位毫秒,你可以通过以下方式实现需求:
方法:先转换时间列格式再导出
先把Timestamp列格式化为带六位微秒的字符串,再通过字符串切片去掉后三位零,最后导出CSV:
# 替换成你的时间列名称 df['time_column'] = df['time_column'].dt.strftime('%d.%m.%Y %H:%M:%S.%f').str[:-3] df.to_csv('!test.csv', sep='\t', index=False)
如果原时间戳的微秒部分存在非零的后三位,还可以先将时间戳四舍五入到毫秒级别,再进行切片处理:
df['time_column'] = df['time_column'].dt.round('ms').dt.strftime('%d.%m.%Y %H:%M:%S.%f').str[:-3] df.to_csv('!test.csv', sep='\t', index=False)
内容的提问来源于stack exchange,提问作者Владимир Ивонин
相关产品推荐
相关产品推荐

