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

在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:10:17