类型错误:无法将类型“Timestamp”与类型“date”进行比较

2024-06-09 08:42:24 发布

您现在位置:Python中文网/ 问答频道 /正文

问题出在第22行:

if start_date <= data_entries.iloc[j, 1] <= end_date:

在这里,我想将start_dateend_date部分与data_entries.iloc[j, 1]部分进行比较,后者正在访问pandas数据帧的一列。我使用

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

但我不确定如何将其转换为日期

import pandas as pd
import datetime

entries_csv = "C:\\Users\\Pops\\Desktop\\Entries.csv"

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

start_date = datetime.date(2018, 4, 1)
end_date = datetime.date(2018, 10, 30)

    for j in range(0, len(data_entries)):
        if start_date <= data_entries.iloc[j, 1] <= end_date:
             print('Hello')

Tags: csvtoformatpandasdatadatetimedateif
2条回答

这会将其转换为日期:

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

只需使用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)]

说明

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

numpy.datetime64 is essentially a thin wrapper an int64. It has almost no date/time specific functionality.

pd.Timestamp is a wrapper around a numpy.datetime64. It is backed by the same int64 value, but supports the entire datetime.datetime interface, along with useful pandas-specific functionality.

相关问题 更多 >