在Datetime列生成日期标记时出现Timestamp与str类型比较错误
解决Timestamp与字符串比较的TypeError问题
这个问题我太熟啦!你遇到的是典型的类型不匹配错误,咱们一步步拆解解决:
错误原因
你的balance_dt列存储的是Timestamp类型的时间数据,但在函数里你直接把它和字符串'2016-11-30'做比较——Python没办法直接对比这两种不同类型的数据,所以触发了TypeError: Cannot compare type 'Timestamp' with type 'str'。
解决方案
这里给你两种实用的解决方式,第二种更适合大数据集(看你的报错索引到262224,数据量不小,优先选第二种):
方式1:修改函数中的日期类型
把字符串日期转换为Timestamp类型后再做比较:
import pandas as pd def f(r): # 将字符串日期转为Timestamp类型,和balance_dt保持一致 cutoff_date = pd.Timestamp('2016-11-30') if r['balance_dt'] <= cutoff_date: return 0 else: return 1 df_obctohdfc['balance_dt_flag'] = df_obctohdfc.apply(f, axis=1)
方式2:使用矢量化操作(更高效)
apply方法在处理大数据集时效率较低,推荐用Pandas的矢量化操作直接生成标记列,逻辑和你写的函数完全一致,但速度快很多:
import pandas as pd cutoff_date = pd.Timestamp('2016-11-30') # 先判断日期是否大于 cutoff_date,得到布尔值Series,再转成int(True→1,False→0) df_obctohdfc['balance_dt_flag'] = (df_obctohdfc['balance_dt'] > cutoff_date).astype(int)
你也可以用pd.to_datetime('2016-11-30')来替代pd.Timestamp,效果是一样的。
内容的提问来源于stack exchange,提问作者Abhay kumar
相关产品推荐
相关产品推荐

