pd.to_datetime 更改日期格式产生错误的日​​期

Spa*_*ace 4 python pandas

我从一个 csv 文件中提取了下表:

时间戳 user_id 成本 val1
01/01/2011 1 1 3
01/07/2012 1 19 57
01/09/2013 1 21 63
01/02/2011 2 20 8

为此,我使用了以下语句: import pandas as pd

newnames = ['date','user_id', 'cost', 'val1']
df = pd.read_csv('expenses.csv', names = newnames, header = False)
df['timestamp'] = pd.to_datetime(df['timestamp'],format='%d%m%Y')
Run Code Online (Sandbox Code Playgroud)

但是df中得到的表日期是错误的:月和日无故排列,即01/09/2013无故变成09/01/2013。

非常感谢您的帮助。

Pra*_*ell 7

嗨,有时由于美国/欧洲时间解析兼容性而发生。

我遵循的是,

情况1

如果您确定您的输入文件具有正确格式的时间戳,并且您想在默认解析器之上使用它,就像在这种情况下一样,请使用(如@filmor 建议的)dayfirst 选项 pd.to_datetime

pd.to_datetime(df['timestamp'], dayfirst=True)
Run Code Online (Sandbox Code Playgroud)

案例二

当您不确定格式的正确性时,请使用默认值 pd.to_datetime(df['timestamp'], dayfirst=True)


fil*_*mor 6

这肯定不是随机的。Pandas 默认为美国日期格式,如果没有意义则回退,即"12/3/2014"变成2014-12-03while"13/3/2014"将被解析为2014-03-13.

您可以通过dayfirst=Truetopd.read_csv强制进行欧式日期解析。