如何在定义的日期和 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()]
我有一个日期列表,我想从定义的日期(我的意思是天数)中获取差异并在新列中附加计算的天数
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()]