如何解决pandas.to_datetime与python内置日期时间的冲突?

问题描述 投票:0回答:1

最初我有

print(transactions.Date.loc[0])
>>>30/04/18

我首先完成

transactions['Date'] = pd.to_datetime(transactions['Date'])

现在

print(transactions.Date.loc[0])
>>>2018-04-30 00:00:00

此后,我检查是否等于等式

transactions.Date.loc[0] + datetime.timedelta(days=1) == transactions.Date.loc[1]
>>>False

所以我检查

print(transactions.Date.loc[0] + datetime.timedelta(days=1))
>>>2018-05-01 00:00:00 
print(transactions.Date.loc[1])
>>>2018-01-05 00:00:00

原来两个都引用相同的时间,但是格式不同。如何修改我的代码以获得相等的True

EDIT:如注释中所指出,实际上是当我使用pd.to_datetime时,问题从5月1日转换为1月5日。因此,新问题是如何解决此问题?

python pandas date-formatting python-datetime
1个回答
1
投票

代码运行正常,您确定transactions.Date.loc[0]transactions.Date.loc[1]之间的差额恰好是1天吗?

>>> l = pd.to_datetime(['2000/23/11', '2000/24/11'], dayfirst=True)
>>> l[0] + datetime.timedelta(days=1) == l[1]
True
>>> print(l[0], l[0] + datetime.timedelta(days=1), l[1], sep='\t')
2000-11-23 00:00:00     2000-11-24 00:00:00     2000-11-24 00:00:00

编辑:使用您的数据,我发现了错误:

dayfirst=True效果很好

>>> l = pd.to_datetime(['30/4/20', '1/5/20'], dayfirst=True)
>>> l[0] - l[1]
Timedelta('-1 days +00:00:00')

没有它,两个日期之间的转换格式是不同的

>>> l = pd.to_datetime(['30/4/20', '1/5/20'])
>>> l[0] - l[1]
Timedelta('116 days 00:00:00')
© www.soinside.com 2019 - 2024. All rights reserved.