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

Python处理DataFrame日期列新增year变量全部行值相同如何解决?

问题根因

  • 你编写的循环逻辑中,每次执行df['Year'] = xxx都是对整个Year列做全量赋值,而非仅修改当前遍历行对应的取值。循环执行完毕后,整列的值会被最后一次循环的计算结果覆盖,这就是所有行取值均为2015的原因:你的数据集最后一行date字段拆分得到的YY为15,小于19,所以最终整列都被赋值为2015。
  • 额外说明:Pandas中直接遍历Series做逐行处理是极低效的实现方式,数据量较大时性能会非常差,更推荐使用向量化操作完成需求。

推荐实现方案

无需编写循环,使用Pandas字符串方法+向量化判断即可实现,性能更高且不会出现赋值错误:

import pandas as pd
import numpy as np

df = df[df['date'].notna()].copy() # 新增copy避免链式索引警告
# 提取date字段按/拆分的最后一段作为YY
df['YY'] = df['date'].str.split('/').str[-1]
# 按规则生成Year列
df['Year'] = np.where(df['YY'].astype(int) < 19, '20' + df['YY'], '19' + df['YY'])

如果你坚持要使用循环实现,需要通过索引定位逐行赋值:

df = df[df['date'].notna()].copy()
# 遍历同时获取行索引和对应date值
for idx, date in df['date'].items():
    YY = date.split('/')[-1]
    if int(YY) < 19:
        df.loc[idx, 'Year'] = '20' + YY
    else:
        df.loc[idx, 'Year'] = '19' + YY

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 22:15:03