如何在定义的日期和 csv 文件中的日期之间取得差异 python

how can get difference between a defined date and the dates from a csv file python

我有一个日期列表,我想从定义的日期(我的意思是天数)中获取差异并在新列中附加计算的天数

from datetime import date, datetime
import pandas as pd

df = pd.read_csv("date.csv", parse_dates = ["dates"])

#a date to substact dates in csv
defined_date = date(2020,12,25)

#a list of dates from a csv file
csv_dates = df.dates

diff = [defined_date  - csv_dates]
print(diff)

我明白了TypeError: unsupported operand type(s) for -: 'DatetimeArray' and 'datetime.date'

现在如何以与定义日期相同的格式读取 csv 文件中的日期,有没有办法做到这一点

#How to change a list of dates from a csv file to date datatype
csv_dates = df.dates

此错误告诉您您正在使用不同的日期类型。

如果你试试这个例子:

defined_date = date(2020,12,25)
csv_dates = date(2020,12,28)

diff = defined_date - csv_dates
print(diff)

输出:

-3 days, 0:00:00

有效。

因此,您必须根据 defined_date 格式转换 csv['date']。(反之亦然)

您正在尝试将数组与单个变量进行比较,'DatetimeArray' 表示它是一个 Pandas 时间戳数组。

在一个简单的例子中,我将索引 [0] 分配给 csv_dates

此时Pandas会给出Timestamp对象,我们需要使用.date()

将其转换为datetime.date

这是工作示例。

我的 CSV 文件:

dates
2017/01/30
2017/01/30
2017/01/30
2017/01/30
2017/01/30
2017/01/30

第一种方法,将 pandas.Timestamp 转换为 datetime.date

修改后的脚本:

from datetime import date, datetime
import pandas as pd

df = pd.read_csv("date.csv", parse_dates = ["dates"])

#a date to substact dates in csv
defined_date = date(2020,12,25)

#a list of dates from a csv file
csv_dates = df.dates

diff = [defined_date  - csv_dates[0].date()]
print(diff)

结果:

[datetime.timedelta(days=1425)]

编辑:第二种方法,将 datetime.date 转换为 pandas.Timestamp

使用 pd.to_datetime() 将日期时间更改为 pandas 时间戳,并一次完成。

from datetime import date, datetime
import pandas as pd

df = pd.read_csv("date.csv", parse_dates = ["dates"])

#a date to substact dates in csv
defined_date = pd.to_datetime(date(2020,12,25))

#a list of dates from a csv file
csv_dates = df.dates

diff = [defined_date  - csv_dates]
print(diff)

结果:

[0   1425 days
1   1425 days
2   1425 days
3   1425 days
4   1425 days
5   1425 days
Name: dates, dtype: timedelta64[ns]]

这是因为您正试图从 defined_date 中减去数组(系列)。这不是那样的。您需要遍历 csv_dates 系列并将差异添加到新列。

dates_diff = []
for d in csv_dates:
    dates_diff.append(d.date() - defined_date)

df['diff'] = dates_diff

显示此错误是因为csv['date']defined_date的数据类型不同。

当您使用 pd.read_csv("date.csv", parse_dates = ["dates"]) 到 read_csv 文件时,日期将解析为 Timestamp

您需要使用 date() 更改 pandas 数据框的日期类型。

因此您可以使用以下代码:

from datetime import date, datetime
import pandas as pd

df = pd.read_csv("date.csv", parse_dates = ["dates"])

#a date to substact dates in csv
defined_date = date(2020,12,25)

#a list of dates from a csv file
csv_dates = df.dates


df['diff'] = [defined_date  - csv_dates.date()]