Python Excel中两个日期之间的差值返回负数

Python Excel中两个日期之间的差值返回负数,python,excel,pandas,date,delta,Python,Excel,Pandas,Date,Delta,我有一个脚本来返回今天的日期和Excel文件中的日期之间的天数差 出于某种原因,对于单编号的日期,我得到一个负数 例如: Date : num days diffrence from today 4/7/2019 : -72 (wrong) 5/7/2019 : -42 (wrong) 20/8/2019 : 63 (correct) 30/6/2019 : 12 (correct) 结果与发布此问题的日期一致(2019年6月17日) 我在Excel文件中检查了100个日期中的其余日期

我有一个脚本来返回今天的日期和Excel文件中的日期之间的天数差

出于某种原因,对于单编号的日期,我得到一个负数

例如:

Date : num days diffrence from today

4/7/2019 : -72 (wrong)

5/7/2019 : -42 (wrong)

20/8/2019 : 63 (correct)

30/6/2019 : 12 (correct)
结果与发布此问题的日期一致
(2019年6月17日)

我在Excel文件中检查了100个日期中的其余日期,这种行为只发生在单编号的日期上。例如:2019年7月5日(2019年7月5日)或2019年10月3日(2019年10月3日)

这是我的代码:

import pandas as pd
import datetime as dt

file_name = pd.read_excel (r'Changes log.xlsx')
df = pd.DataFrame(file_name, columns= ['Due Date'])

today = pd.Timestamp.today()
df['Due Date'] = pd.to_datetime(df['Due Date'])
delta = (df['Due Date'] - today).dt.days
print(delta)
注意:
df['Due Date
]包含Excel文件中的日期。由
%d/%m/%Y


任何帮助都很好

使用参数
dayfirst=True

df = pd.read_excel('Changes log.xlsx')
df.columns = ['Due Date']

today = pd.Timestamp.today()
df['Due Date'] = pd.to_datetime(df['Due Date'], dayfirst=True)
delta = (df['Due Date'] - today).dt.days
print(delta)

数据示例:

df = pd.DataFrame({'Date': ['4/7/2019', '5/7/2019', '20/8/2019', '30/6/2019']})
df['Date'] = pd.to_datetime(df['Date'], dayfirst=True)

delta = (df['Date'] - pd.Timestamp.today()).dt.days
输出

0    16
1    17
2    63
3    12
Name: Date, dtype: int64

您可以使用该方法的
格式
参数

df['Date']=pd.to_datetime(df['Date'],format=“%d/%m/%Y”)
完整示例:

df=pd.DataFrame({'Date':['4/7/2019','5/7/2019','20/8/2019','30/6/2019']})
df['Date']=pd.to_datetime(df['Date'],format=“%d/%m/%Y”)
delta=(df['Date']-pd.Timestamp.today()).dt.days
打印(增量)
产出:

0    16
1    17
2    63
3    12
Name: Date, dtype: int64

我认为在前两种情况下,它默认为美国日期格式MM/DD/YYYY@IcedLance确实如此,您可以使用
print(pd.to_datetime(“2019年7月4日”).month)
进行验证,其中打印
4
。对于
print(pd.to_datetime(“2019年8月20日”).month)
它是
8
。谢谢,但它没有解决问题。你能详细说明一下吗,因为看看你的示例数据,它确实解决了问题。@DanielBeilin。我编辑了你的代码,你能复制并粘贴我的代码,然后再试一次吗?结果表明问题是由Excel中的格式引起的,代码本身可以工作。我更改了代码的排序cell,现在一切似乎都正常了!谢谢!@EfranNo担心,很高兴我能帮上忙。祝Python和Pandas好运。别忘了我的答案是否对你有帮助:)@Danielbeilin当我传递
格式=“%d/%m/%Y”
参数时,我遇到一个错误:
值错误:时间数据日期时间。日期时间(2016,6,9,0,0)与格式“%d/%m/%Y”不匹配(比赛)
该错误看起来存储的值已经是日期时间了。如果是这种情况,您可能需要分别处理每个数据类型。我会研究该方法。结果发现问题是由Excel中的格式引起的,代码本身可以工作。我更改了单元格的排序,现在一切都正常了!谢谢!