为什么 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"。
有人知道我在这里遗漏了什么吗?
问题是输出没有分配回列表,所以没有改变。
解决方案,如果要分配给具有 enumerate
的 DataFrame
的相同列表以进行索引:
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')
我正在尝试将 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"。
有人知道我在这里遗漏了什么吗?
问题是输出没有分配回列表,所以没有改变。
解决方案,如果要分配给具有 enumerate
的 DataFrame
的相同列表以进行索引:
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')