Pandas按行索引匹配更新不同列数DataFrame时返回None的问题求助
Pandas按行索引匹配更新不同列数DataFrame时返回None的问题求助
嗨,我来帮你理清这个问题啦!你遇到的df3返回None的情况,其实是因为Pandas里的update()方法是**原地修改(in-place)**的——它不会返回一个新的DataFrame,而是直接修改你调用它的那个原DataFrame(也就是这里的df1),所以当你把df1.update(df2)赋值给df3时,得到的就是None。
要得到你期望的和df4一样的结果,正确的做法是先复制原DataFrame,再在副本上执行更新操作,具体步骤如下:
- 先复制
df1得到一个独立的副本,避免修改原数据 - 在副本上调用
update()方法,用df2的值去更新匹配的行和列 - 此时副本就是你想要的
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_
相关产品推荐
相关产品推荐

