【问题标题】:How to stop to_csv from changing date format?如何阻止 to_csv 更改日期格式?
【发布时间】:2018-12-24 03:17:05
【问题描述】:

我正在尝试将我的数据框按原样写入 csv。数据框的几列是日期时间。

我已经使用df.column = pd.to_date(df.column) 将日期从dd/mm/yyyy 转换为yyyy/mm/dd,这已经成功。

但是,当我将数据框写入 csv 时,日期列会恢复为 dd/mm/yyyy 格式。

这是我写入 csv 的方式,df.to_csv('~/Desktop/df.csv',date_format='%Y-%m-%d')

如何防止日期恢复为旧格式?

pandas version 0.23
python 3.6 - anaconda spyder

编辑:

这就是我阅读 csv 的方式:

df = pd.read_csv('~/Downloads/sample.csv.gz',parse_dates=True, delimiter='\t', compression = 'gzip')

【问题讨论】:

  • 您可以为您的问题创建一个minimal reproducible example 吗?当我尝试时,它起作用了。 (我假设您的意思是 pd.to_datetime,并不是将日期从一种格式转换为另一种格式,而是将一种 type 转换为另一种。)
  • 您确定这不仅仅是您如何打开 csv 的问题吗?例如,当您打开它时,excel 可能会自动重新格式化您的日期(当我尝试一个最小的示例时,这发生在我的机器上,但 csv 本身仍然看起来像预期的那样)。也许通过在文本编辑器中打开你的 csv 来测试
  • @sacul 添加了我在文件中的读取方式,并让我测试打开 csv。我是用excel打开csv,我会用文本编辑。

标签: python-3.x pandas datetime export-to-csv


【解决方案1】:

下面的代码将带有日期列的数据框保存为 csv。 (Jupyter Notebook 5.0.0, Python 3.6.6)

导入库

import pandas as pd
import numpy as np
import datetime as datetime

创建示例数据框

x = ['01/12/2018','01/12/2018','01/12/2018','01/12/2018']
y = ['A','B','C','D']
df = pd.DataFrame({'date':x, 'var':y})
df['date'] = pd.to_datetime(df['date'])
df

注意:这里,pd.to_datetime() 格式将其更改为 yyyy-mm-dd

转换为所需格式

df['date'] = df['date'].dt.strftime('%Y/%m/%d')
df

将数据框保存为 csv

df.to_csv('df.csv', sep=',',index=False)

在文本编辑器中打开文件

在 MS Excel 中打开文件可能需要更改列格式,如下所示

【讨论】:

    【解决方案2】:

    根据您写的内容,这听起来很奇怪。您是否可以创建数据框的副本而不将日期格式应用于其列?

    否则,为了更安全起见,我会尝试在编写 df 之前使用您喜欢的格式创建一个字符串列。

    【讨论】:

    • excel 正在将日期转换回来。使用文本编辑器打开一切看起来都很好
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-28
    • 2011-12-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多