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

Pandas使用assign方法调用双参数函数处理日期列报错如何解决

问题原因分析

你编写的代码存在两处核心问题:

  • datetime.strptime('%Y-%m-%d')会直接执行函数调用,而非将可调用对象传给apply,该调用本身就缺少第一个日期字符串入参,自然无法拿到date列的对应值
  • 逐行apply转换日期的性能极低,远不如pandas原生的向量化转换方法适配流水线场景
最优解决方案

优先使用pandas内置的pd.to_datetime()实现,性能比apply高几个数量级,写法也更简洁:

import pandas as pd

df = df.assign(date=pd.to_datetime(df['date'], format='%Y-%m-%d'))

如果是在链式数据流水线中使用,推荐用lambda引用当前流水线中的DataFrame,避免引用外部旧df对象导致的列不匹配问题:

df = (
    pd.read_csv('你的数据源文件')
    # 其他中间数据处理步骤
    .assign(date=lambda x: pd.to_datetime(x['date'], format='%Y-%m-%d'))
    # 后续数据处理步骤
)

语法修正参考(非最优,仅适配坚持用datetime.strptime的场景)

如果一定要用datetime.strptime配合apply实现,需要用lambda包裹函数传递参数:

from datetime import datetime

df = df.assign(date=df['date'].apply(lambda x: datetime.strptime(x, '%Y-%m-%d')))
补充说明
  • 显式指定format参数可以大幅提升pd.to_datetime的转换速度,如果不确定日期格式可以省略该参数,pandas会自动推断标准日期格式
  • assign方法返回的是新的DataFrame对象,不会修改原对象,需要赋值给变量保存转换结果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 16:06:01