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

Pandas处理datetime64[ns]日期:保留年月移除日时报错排查与解决

解决Pandas日期列仅保留年月的错误问题

嘿,我来帮你搞定这个问题!首先咱们先搞清楚你遇到的错误原因:

你调用pd.to_datetime(df['my_date'].dt.year, df['my_date'].dt.month, 0)的方式不对——pd.to_datetime的参数规则不是这样的。这个函数的第一个参数是需要转换的目标数据(比如Series、字符串数组等),而你直接把三个独立的Series(年、月、固定的0)作为位置参数传进去,函数内部无法正确解析这些参数的类型,所以抛出了TypeError: invalid type comparison。

接下来给你几种简单靠谱的修复方法,按需选择:

方法1:直接转成月份周期(最简洁)

如果你只需要保留「年-月」的标识,不需要严格的datetime类型,用dt.to_period('M')是最方便的:

# 确保原日期列已经是datetime类型(如果不是先执行下面这行)
# df['my_date'] = pd.to_datetime(df['my_date'])
df['my_date_new'] = df['my_date'].dt.to_period('M')

这样得到的结果是类似2023-10的周期类型,后续做分组、统计都很方便。如果需要转成当月第一天的datetime类型,再加一步:

df['my_date_new'] = df['my_date'].dt.to_period('M').dt.to_timestamp()

方法2:格式化字符串后转datetime

先把原日期格式化为YYYY-MM的字符串,再转成datetime(结果会默认是当月第一天):

df['my_date_new'] = pd.to_datetime(df['my_date'].dt.strftime('%Y-%m'))

方法3:构造参数传入pd.to_datetime(灵活可控)

如果你想明确指定年、月、日(比如固定为1号),可以构造一个包含年、月、日的字典传给pd.to_datetime:

df['my_date_new'] = pd.to_datetime({
    'year': df['my_date'].dt.year,
    'month': df['my_date'].dt.month,
    'day': 1
})

这种方式可以自定义日的数值,灵活性更高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 04:13:11