列表推导式使用Timestamp作为判断条件报类型错误该如何解决
问题原因
报错核心是运算两边类型不匹配:df['date']列存储的是pandas.Timestamp类型的时间对象,无法直接和字符串类型的日期值做大小比较。
解决方案
方案1:修改原有列表推导式
只需要把比较用的日期字符串转换为Timestamp类型即可:
import pandas as pd v = [i >= pd.Timestamp('1920-07-01') for i in df['date']]
方案2(更推荐):使用pandas向量化运算
pandas原生支持整列的批量比较,不需要手动写列表推导式,执行效率更高,写法更简洁:
# 直接生成布尔Series,可直接用于DataFrame筛选等后续操作 bool_result = df['date'] >= '1920-07-01' # 如果需要转换为Python列表,调用tolist()即可 v = bool_result.tolist()
注:pandas会自动解析右侧符合格式的日期字符串为
Timestamp类型,不需要手动转换。
结果验证
两种方案得到的输出都符合预期:前6条(对应1920年1月到6月)为False,从1920年7月开始的条目均为True。
内容的提问来源于stack exchange,提问作者Anna Mogilevskaja
相关产品推荐
相关产品推荐

