如何从CSV文件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中减去数组(系列)。这是行不通的。您需要遍历csv_dates系列,并向新列添加差异。

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

您正在尝试比较单个变量的数组,'DatetimeArray'意味着它是一个Pandas时间戳数组。

在一个简单的情况下,我将索引[0]分配给csv_dates

此时Pandas将给出Timestamp对象,我们需要使用.date()将其转换为datetime.date

下面是工作示例。

My CSV file:

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()将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]]

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

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

您需要使用date()更改pandas dataframe中的日期类型。

因此可以使用以下代码:

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()]

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

如果你尝试这个例子:

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']。(或反之亦然)

相关内容

  • 没有找到相关文章