python - TypeError:无法将“时间戳”类型与“日期”类型进行比较
问题描述
问题在第 22 行:
if start_date <= data_entries.iloc[j, 1] <= end_date:
我想比较访问熊猫数据框列的start_date
和end_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')
解决方案
只需使用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.datetime
or对象。datetime.date
这是低效的,因为您失去了矢量化功能。对象的好处pd.Timestamp
是您可以利用矢量化功能进行计算。如此处所述:
numpy.datetime64
本质上是一个 int64 的薄包装器。它几乎没有特定日期/时间的功能。
pd.Timestamp
是一个 numpy.datetime64 的包装器。它由相同的 int64 值支持,但支持整个datetime.datetime
接口以及有用的 pandas 特定功能。
推荐阅读
- spring - Rest Controller 类是单例的吗?
- javascript - React Native 每次打开页面时如何刷新数据?
- 3dsmax - MaxscriptEditor 打印功能无法在侦听器上打印
- python - 我已经从一个字符串创建了所有子字符串,现在我想将所有以'aeiou' 开头的子字符串存储到一个空列表中。你能检查错误吗?
- c - 如果在循环中的每次迭代中声明一个数组的大小不同,会发生什么?
- bash - 如何在 Ubuntu 上正确安装 protoc-gen-go?
- firebase - 从 Firestore 检索数据
- javascript - 将图像添加到按钮
- android - 如何将pdf保存在范围存储中?
- docker - VPS 上的 Docker 和 webapp env - 如何以正确的方式进行操作