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

嵌套循环结合字典、列表处理Pandas列添加else后列表长度异常问询

问题原因

你的代码长度暴涨的核心原因是else分支的绑定逻辑错误,且没有提前终止循环:

  • 当前else和最内层的if el == row绑定,意味着每遍历到字典里的一个州缩写,只要和当前行值不匹配,就会往列表里追加一次Unknown
  • 你的region_dict里总共有33个州/州组合条目,每一行数据都会触发33次判断:匹配成功的场景下会追加1次区域名+32次Unknown,匹配失败的场景下会追加33次Unknown,最终列表长度等于原DataFrame行数*33,和你观测到的暴涨结果一致
  • 原本没有else分支时,只有匹配成功才会追加内容,刚好每个行仅匹配成功1次,所以长度等于原DataFrame行数463

修复方案

方案1:调整循环逻辑,每行仅追加1次结果

region_list = []
for row in user_df['State']:
    matched = False
    for k, v in region_dict.items():
        if row in v:
            region_list.append(k)
            matched = True
            break # 匹配到就跳出循环,无需继续遍历其他区域
    if not matched:
        region_list.append('Unknown')

方案2:更高效的Pandas原生写法,避免嵌套循环

先把区域字典转换为「州缩写-区域」的直接映射表,再用map批量处理:

# 构建州到区域的映射字典
state_region_map = {}
for region, states in region_dict.items():
    for state in states:
        state_region_map[state] = region

# 直接生成区域列,未匹配的自动填充Unknown
user_df['region'] = user_df['State'].map(state_region_map).fillna('Unknown')
# 如需转列表调用 user_df['region'].tolist() 即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 04:15:02