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

Pandas循环中批量转换多DataFrame日期列为datetime失效问题

问题原因解释

核心根源:Python的变量重赋值机制未作用到原DataFrame

你写的循环代码不生效的原因和Pandas本身的日期转换逻辑无关,本质是Python的变量赋值规则导致的:

  • 当你构建cols_to_change = [df1['date1'], df2['date2'], df3['date3']]时,列表中存储的是三个Series对象的临时引用
  • 循环中的i = pd.to_datetime(i, format = '%Y-%m-%d')只是把循环变量i的指向修改为了新生成的datetime类型Series,这个操作完全没有修改原DataFrame中对应列的存储内容,相当于你只是生成了新的Series对象但没有赋值回原DataFrame,原来的df1['date1']等列依然指向原来的字符串类型Series,自然不会生效。

单独赋值生效的原因

你单独写df1['date1'] = pd.to_datetime(df1['date1'], format = '%Y-%m-%d')时,是直接对DataFrame的指定列进行赋值操作,新生成的datetime类型Series会直接覆盖原列的内容,因此转换会生效。
单独取单个值转换返回Timestamp属于正常现象,因为pd.to_datetime对单个符合格式的字符串本身就会返回Timestamp类型,这个操作没有涉及到修改原DataFrame的逻辑,自然不会有问题。

正确的批量转换写法

如果要批量修改不同DataFrame的日期列,需要存储每个列对应的DataFrame对象和列名,循环中直接对原DataFrame的列赋值即可:

cols_to_change = [
    (df1, 'date1'),
    (df2, 'date2'),
    (df3, 'date3')
]

for df, col_name in cols_to_change:
    df[col_name] = pd.to_datetime(df[col_name], format = '%Y-%m-%d')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 08:00:02