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

Pandas DataFrame重复运行Season字段转换代码报ValueError原因查询

错误原因分析

该错误的核心诱因是两次运行代码时Season列的数据格式发生了变化,导致loc赋值时左右两侧筛选结果的长度不匹配,具体逻辑如下:

  • 首次运行时,初始的Season列是6位数字格式,转为字符串后长度统一为6。每个赋值语句的左侧loc筛选条件同时满足「后两位符合季度编码规则」+「字符串长度等于6」,右侧仅按「后两位符合季度编码规则」筛选,两者匹配到的行数完全相等,赋值逻辑正常执行,最终Season被转为季度名称 + 年份的文本格式。
  • 首次运行结束后,Season列的值已经变成类似Summer 2021的文本,字符串长度远大于6。第二次运行相同代码时:
    • 左侧loc筛选因为加入了str.len() == 6的限制,没有匹配到任何行,返回长度为0的空序列
    • 右侧的筛选没有加长度限制,部分符合后两位规则的行会被命中,返回的序列长度大于0
  • Pandas要求loc赋值操作的左右两侧序列长度必须一致,空序列和非空序列长度不匹配,因此抛出对应报错。
优化方案

可以提前统一筛选逻辑,或使用映射规则避免重复执行报错,参考代码如下:

# 定义季度编码映射关系
season_map = {
    '11': 'Spring',
    '12': 'Summer',
    '21': 'Autumn',
    '22': 'Holiday'
}
# 仅对还未转换的6位格式Season做处理
convert_mask = df['Season'].astype(str).str.len() == 6
df.loc[convert_mask, 'Season'] = df.loc[convert_mask, 'Season'].astype(str).apply(
    lambda x: f"{season_map[x[-2:]]} {x[:4]}"
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 16:09:01