为什么 pandas df.add_suffix() 不能使用 for-loop

Why is pandas df.add_suffix() not working with for-loop

我正在尝试将 pandas df.add_suffix() 用于多个数据帧,这些数据帧通过 for 循环存储在列表中:

df_1 = pd.DataFrame({'X': [2, 3, 4, 5],  'Y': [4, 5, 6, 7]})
df_2 = pd.DataFrame({'X': [6, 7, 8, 9],  'Y': [9, 8, 7, 6]})
df_3 = pd.DataFrame({'X': [6, 3, 1, 13],  'Y': [7, 0, 1, 4]})

mylist = [df_1, df_2, df_3]

for i in mylist:
    i = i.add_suffix('_test')

然而,当我之后打印数据帧时,我仍然看到旧的列名 "X" 和 "Y"。

分别对每个数据帧执行相同的操作时:

df1 = df_1.add_suffix('_test')

一切都按预期工作,我得到了列名 "X_test" 和 "Y_test"。

有人知道我在这里遗漏了什么吗?

问题是输出没有分配回列表,所以没有改变。

解决方案,如果要分配给具有 enumerateDataFrame 的相同列表以进行索引:

for j,i in enumerate(mylist):
    mylist[j] = i.add_suffix('_test')

print (mylist)
[   X_test  Y_test
0       2       4
1       3       5
2       4       6
3       5       7,    X_test  Y_test
0       6       9
1       7       8
2       8       7
3       9       6,    X_test  Y_test
0       6       7
1       3       0
2       1       1
3      13       4]

或者如果想要 DataFrame 的新列表,请使用列表理解:

dfs = [i.add_suffix('_test') for i in mylist]

print (dfs)
[   X_test  Y_test
0       2       4
1       3       5
2       4       6
3       5       7,    X_test  Y_test
0       6       9
1       7       8
2       8       7
3       9       6,    X_test  Y_test
0       6       7
1       3       0
2       1       1
3      13       4]
df_1 = pd.DataFrame({'X': [2, 3, 4, 5],  'Y': [4, 5, 6, 7]})
df_2 = pd.DataFrame({'X': [6, 7, 8, 9],  'Y': [9, 8, 7, 6]})
df_3 = pd.DataFrame({'X': [6, 3, 1, 13],  'Y': [7, 0, 1, 4]})

mylist = [df_1, df_2, df_3]

for i,j in enumerate(mylist):
    mylist[i] = j.add_suffix('_test')

更新后的dfs在列表(mylist)中,而不是原来的。

您正在更改变量 i 的值,但是 i 它与 mylist 元素不同,当您使用 for 循环迭代时正在将 mylist 中的连续元素分配给变量 i,您应该使用列表索引来更改元素:

for i in range(len(mylist)):
    mylist[i] = mylits[i].add_suffix('_test')