Pandas Timestamp与字符串比较报错及循环逻辑修复咨询
问题分析与解决方案
首先,你的报错原因很明确:你把Date列转成了字符串格式(通过dt.strftime('%m-%d-%Y')),而ICO_to是Timestamp类型,字符串和时间戳无法直接比较,所以触发了TypeError。
修正思路
- 保留
Date列的datetime类型,不要转成字符串,这样才能和时间运算后的结果进行比较。 - 避免使用
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
相关产品推荐
相关产品推荐

