TypeError:无法将类型“时间戳”与类型“日期”进行比较

时间:2018-07-23 08:10:44

标签: python pandas datetime

问题出在第22行

find . -maxdepth 1 -type f -name "${dir}*" | xargs -n 1 -I{} mv {} "$dir"

我想将if start_date <= data_entries.iloc[j, 1] <= end_date:start_date部分与end_date进行比较,后者正在访问熊猫数据框的一列。我使用

将列转换为 datetime

data_entries.iloc[j, 1]

但是我不确定如何将其转换为 date

data_entries['VOUCHER DATE'] = pd.to_datetime(data_entries['VOUCHER DATE'], format="%m/%d/%Y")

2 个答案:

答案 0 :(得分:5)

只需使用pd.Timestamp个对象而无需进行任何转换:

start_date = pd.Timestamp('2018-04-01')
end_date = pd.Timestamp('2018-10-30')

res = data_entries[data_entries['VOUCHER DATE'].between(start_date, end_date)]

说明

请勿在Pandas系列中使用datetime.datetimedatetime.date对象。这是低效的,因为您失去了矢量化功能。 pd.Timestamp对象的好处是您可以利用矢量化功能进行计算。如here所述:

  

numpy.datetime64本质上是int64的精简包装。它有   几乎没有日期/时间专用功能。

     

pd.Timestamp是numpy.datetime64的包装。它的支持   相同的int64值,但支持整个datetime.datetime   界面,以及有用的熊猫特有功能。

答案 1 :(得分:4)

这会将其转换为日期:

data_entries['VOUCHER DATE'] = pd.to_datetime(data_entries['VOUCHER DATE'], format="%m/%d/%Y").dt.date

但是我不建议这样过滤。 这要快得多

data_entries[data_entries['VOUCHER DATE'].between(start_date, end_date)]

阅读此article