Дельта между двумя датами в Excel возвращает отрицательное число - PullRequest
0 голосов
/ 17 июня 2019

У меня есть скрипт для возврата разницы дней между сегодняшней датой и датой в файле 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)

Я проверил оставшиеся 100 дат в моих файлах Excel, и это происходит только в даты с одним номером. Например: 5/7/2019 (5 июля 2019 г.) или 3 октября 2009 г. (3 октября 2019 г.).

Это мой код:

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 ]

5 голосов
/ 17 июня 2019

Используйте аргумент 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 голос
/ 17 июня 2019

Вы можете использовать аргумент format метода to_datetime .

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
...