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

pandas使用DataFrame.loc更新列值失败原因及正确实现方案

问题原因

你编写的赋值代码触发了pandas的DataFrame列名自动对齐规则:当你将一个DataFrame赋值给另一个DataFrame的切片时,pandas会优先匹配两边的列名再完成赋值,而非按列的位置顺序赋值。你左侧赋值目标的列是c1、c2,右侧待赋值的DataFrame列是_c1、_c2,两边列名完全不匹配,找不到对应关系就会将目标位置填充为NaN,和你的预期结果不符。

正确实现方式

下面提供3种常用的可运行方案:

  • 方案1:提取右侧的numpy数组赋值,跳过列名对齐逻辑(最简洁)
data.loc[~data['_c1'].isna(), ['c1','c2']] = data.loc[~data['_c1'].isna(), ['_c1','_c2']].values

.values会将右侧DataFrame转为纯数值数组,按位置顺序对应赋值给左侧的两列,不会触发列名对齐规则。

  • 方案2:重命名右侧列名后赋值
# 将右侧列名修改为和左侧目标列一致,触发列名匹配后完成赋值
data.loc[~data['_c1'].isna(), ['c1','c2']] = data.loc[~data['_c1'].isna(), ['_c1','_c2']].rename(columns={'_c1':'c1', '_c2':'c2'})
  • 方案3:使用pandas的update方法完成覆盖更新
# 提取需要更新的片段、重命名列后调用update方法覆盖原表对应位置
update_slice = data.loc[~data['_c1'].isna(), ['_c1','_c2']].rename(columns={'_c1':'c1', '_c2':'c2'})
data.update(update_slice)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 19:45:04