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

时间:2019-06-17 09:53:35

标签: 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)

结果在发布此问题(17/6/2019)

的当天是正确的

我检查了Excel文件中其余100个日期,并且此行为仅在单编号日期上发生。例如:2019年5月7日(2019年7月5日)或2019年3月10日(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

任何帮助都会很棒

2 个答案:

答案 0 :(得分:5)

使用参数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

答案 1 :(得分:1)

您可以使用to_datetime方法的format参数。

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
print(delta)

输出:

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