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

Phe*_*ndy 5 python datetime pandas

问题在第22行

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

我想比较正在访问熊猫数据帧列的start_dateend_date部分data_entries.iloc[j, 1]。我使用以下方式将列转换为日期时间

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')
Run Code Online (Sandbox Code Playgroud)

mos*_*evi 7

这将其转换为日期:

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

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

data_entries[data_entries['VOUCHER DATE'].between(start_date, end_date)]
Run Code Online (Sandbox Code Playgroud)

阅读这篇文章


jpp*_*jpp 6

只需使用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)]
Run Code Online (Sandbox Code Playgroud)

说明

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

numpy.datetime64本质上是int64的薄包装。它几乎没有日期/时间特定的功能。

pd.Timestamp是围绕numpy.datetime64的包装。它由相同的int64值支持,但支持整个datetime.datetime 接口以及有用的特定于熊猫的功能。