首页 > 解决方案 > TypeError:无法将“时间戳”类型与“日期”类型进行比较

问题描述

问题在第 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")

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

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')

标签: pythonpandasdatetime

解决方案


只需使用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.datetimeor对象。datetime.date这是低效的,因为您失去了矢量化功能。对象的好处pd.Timestamp是您可以利用矢量化功能进行计算。如此处所述:

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

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


推荐阅读