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
相关产品推荐
相关产品推荐

