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

pandas for循环遍历DataFrame行.loc赋值触发ValueError问题

报错根本原因

报错和混合使用数值、字符串索引无关,核心问题是你筛选得到的region变量是pandas Series对象,不是单个标量值,无法直接赋值给df2的单个单元格。
你写的筛选逻辑df1.loc[(df1["code"] == 匹配值), "region"]哪怕只匹配到1条记录,返回的依然是带原生索引的Series结构,例如匹配code为AFG的行时,拿到的region实际内容是:

0    Middle East
Name: region, dtype: object

而非直接的Middle East字符串。你之前把这个Series存到变量里不会触发报错,只有在尝试把整个Series赋值给单个单元格时,pandas才会抛出类型不兼容的错误。

修正后的循环实现

只需要在筛选region后,提取匹配到的标量值再赋值即可,两种遍历方式的修正代码如下:

  • range遍历版本
for i in range(len(df2)):
    # .item() 提取唯一匹配的标量值
    region = df1.loc[df1["code"] == df2.loc[i, "code"], "region"].item()
    df2.loc[i, "region"] = region
  • iterrows遍历版本
for index, row in df2.iterrows():
    region = df1.loc[df1["code"] == row["code"], "region"].item()
    df2.loc[index, "region"] = region
优化建议

如果你的df1中每个code唯一对应一个region(样例数据满足该条件),完全不需要写循环,性能更高的写法是先构建code到region的映射字典,再通过map直接整列赋值:

# 构建映射关系
code_region_map = dict(zip(df1["code"], df1["region"]))
# 一次性生成整列region
df2["region"] = df2["code"].map(code_region_map)

注意:如果df1中存在同一个code对应多条region记录的情况,.item()会抛出错误,这种场景可以把.item()替换为.iloc[0],取第一条匹配到的region值即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 21:15:19