You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pandas Timestamp与字符串比较报错及循环逻辑修复咨询

问题分析与解决方案

首先,你的报错原因很明确:你把Date列转成了字符串格式(通过dt.strftime('%m-%d-%Y')),而ICO_to是Timestamp类型,字符串和时间戳无法直接比较,所以触发了TypeError。

修正思路

  1. 保留Date列的datetime类型,不要转成字符串,这样才能和时间运算后的结果进行比较。
  2. 避免使用iterrows()循环(pandas中循环效率极低,尤其是数据量大的时候),改用矢量化布尔索引来过滤行,既简洁又高效。

修正后的代码

import pandas as pd

# 先处理列名和类型转换
D1.rename(columns={'ICO to': 'ICO_to'}, inplace=True)
D1['Date'] = pd.to_datetime(D1['Date'])  # 保持datetime类型,不转字符串
D1['ICO_to'] = pd.to_datetime(D1['ICO_to'])

# 计算ICO_to减去5天的阈值
threshold = D1['ICO_to'] - pd.Timedelta(days=5)
# 过滤出Date >= threshold的行(也就是删除Date < threshold的行)
D1 = D1[D1['Date'] >= threshold]

为什么不用循环?

iterrows()会逐行遍历数据,当DataFrame行数较多时,速度会非常慢。而矢量化操作是pandas的核心优势,它会对整列数据进行批量运算,性能提升非常明显。

验证你的示例数据

你的示例中ICO_to是2017-05-30,减去5天后是2017-05-25,而所有Date都是2017-06-12及以后,都大于这个阈值,所以最终不会删除任何行,符合预期逻辑。


内容的提问来源于stack exchange,提问作者Cole Starbuck

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 03:39:38