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

Pandas按行索引匹配更新不同列数DataFrame时返回None的问题求助

Pandas按行索引匹配更新不同列数DataFrame时返回None的问题求助

嗨,我来帮你理清这个问题啦!你遇到的df3返回None的情况,其实是因为Pandas里的update()方法是**原地修改(in-place)**的——它不会返回一个新的DataFrame,而是直接修改你调用它的那个原DataFrame(也就是这里的df1),所以当你把df1.update(df2)赋值给df3时,得到的就是None。

要得到你期望的和df4一样的结果,正确的做法是先复制原DataFrame,再在副本上执行更新操作,具体步骤如下:

  1. 先复制df1得到一个独立的副本,避免修改原数据
  2. 在副本上调用update()方法,用df2的值去更新匹配的行和列
  3. 此时副本就是你想要的df3

修改后的代码如下:

import pandas as pd

data1 = {'A': [1, 2, 3,4],'B': [4, 5, 6,7],'C':[7,8,9,10]}
df1 = pd.DataFrame(data1,index=['I_1','I_2','I_3','I_4'])
print("原df1:")
print(df1)

data2 = {'A': [10, 40], 'B': [40, 70]}
df2 = pd.DataFrame(data2 ,index=['I_1','I_4'])
print("\n用于更新的df2:")
print(df2)

# 关键修改:先复制df1,再在副本上执行update
df3 = df1.copy()
df3.update(df2)
print("\n更新后的df3:")
print(df3)

data4 =  {'A': [10, 2, 3,40],'B': [40, 5, 6,70],'C':[7,8,9,10]}
df4 = pd.DataFrame(data4 ,index=['I_1','I_2','I_3','I_4'])
print("\n期望的df4:")
print(df4)

运行这段代码后,df3就会和df4完全一致啦!另外补充一下update()的特性,刚好契合你的需求:

  • 它只会更新行索引和列名都匹配的位置,不匹配的列(比如你的C列)会保持原数值不变
  • 只有在df2中存在的行索引(这里是I_1和I_4)会被更新,其他行的数值不受影响

备注:内容来源于stack exchange,提问作者jw_

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.23 14:52:44