pandas使用 DataFrame 自身的某一行修改另一行的值,被修改的那一行会被清空?-灵析社区

sumous_01

df1 为: A B C D 0 A0 B0 C0 D0 1 A1 B1 C1 D1 2 A2 B2 C2 D2 3 A3 B3 C3 D3 df2 为: A B C D 1 A1 B4 C4 D4 2 A5 B5 C5 D5 3 A6 B6 C6 None 4 A7 B7 C7 D7 如果想要修改 df2 中第一行的值,使用: `df2.loc[df2['A']=='A1', ('B', 'C', 'D')] = df2.loc[df2['A']=='A5', ('B', 'C', 'D')]`,df2 会变为: A B C D 1 A1 NaN NaN NaN 2 A5 B5 C5 D5 3 A6 B6 C6 None 4 A7 B7 C7 D7 第一行的值全部变为了空值,但是同样的句式,使用 df1 给 df2 的第一行赋值: `df2.loc[df2['A']=='A1', ('B', 'C', 'D')] = df1.loc[df1['A']=='A1', ('B', 'C', 'D')]`,则可以成功赋值,df2 为: A B C D 1 A1 B1 C1 D1 2 A5 B5 C5 D5 3 A6 B6 C6 None 4 A7 B7 C7 D7 另外,如果将第一个赋值语句改为:`df2.loc[df2['A']=='A1', ('B', 'C', 'D')] = df2.loc[df2['A']=='A5', ('B', 'C', 'D')].values`,也是可以赋值成功的: A B C D 1 A1 B5 C5 D5 2 A5 B5 C5 D5 3 A6 B6 C6 None 4 A7 B7 C7 D7 请教一下大神,为什么结果会这样?

阅读量:12

点赞量:0

问AI
你是不是测试有问题 "df2.loc[df2['A'] == 'A1', ('B', 'C', 'D')] = df1.loc[df1['A'] == 'A1', ('B', 'C', 'D')]" 不加 values 也是一样的情况。 import pandas as pd data1 = { 'A': ['A0', 'A1', 'A2', 'A3'], 'B': ['B0', 'B1', 'B2', 'B3'], 'C': ['C0', 'C1', 'C2', 'C3'], 'D': ['D0', 'D1', 'D2', 'D3'] } data2 = { 'A': ['A1', 'A5', 'A6', 'A7'], 'B': ['B4', 'B5', 'B6', 'B7'], 'C': ['C4', 'C5', 'C6', 'C7'], 'D': ['D4', 'D5', None, 'D7'] } df1 = pd.DataFrame(data1) df2 = pd.DataFrame(data2) print(df1) print(df2) df2.loc[df2['A'] == 'A1', ('B', 'C', 'D')] = df1.loc[df1['A'] == 'A1', ('B', 'C', 'D')] print(df2) # df2.loc[df2['A'] == 'A1', ('B', 'C', 'D')] = df2.loc[df2['A'] == 'A5', ('B', 'C', 'D')] # print(df2)