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

使用df.at无法修改DataFrame的值 字典值为列表对象时赋值失败

问题根因
  • 赋值目标为列表这类非标量可迭代对象时,Pandas默认会尝试拆分可迭代对象匹配多列/多行赋值规则,导致单个列表无法直接存入单个单元格,出现静默赋值失败。
  • iterrows()返回的行是原DataFrame的副本,基于该副本的行索引配合at赋值非标量时,容易出现写入失效的问题。
解决方法

方法1:修改循环内的赋值逻辑

在赋值时明确指定存入的是单个对象,仅修改赋值行即可:

for i,row in df.iterrows() :
    if row['B'] == 'nan':
        key = row['A']
        # 明确标记要存入的是单个列表对象,避免被自动拆分
        df.at[i,'B'] = [d1[key]][0]

也可以用df.iat[i, df.columns.get_loc('B')] = d1[key]实现相同效果。

方法2:用向量化操作替代循环(更推荐)

避免iterrows的性能问题和赋值风险,直接用Pandas内置方法实现需求,代码更简洁高效:

# 筛选B列为'nan'的行,用A列的值匹配d1映射后直接赋值
df.loc[df['B'] == 'nan', 'B'] = df.loc[df['B'] == 'nan', 'A'].map(d1)

以上两种方法运行后均可得到你预期的输出结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 17:15:00