通过使用 for 循环循环每个数据帧来处理数据帧



我尝试使用for loop对我拥有的所有数据帧执行一些过程,没有任何变化。

代码:

import pandas as pd
a = pd.DataFrame({'a':[1,2,3,4,5,6,7],
'b':[8,9,0,1,2,3,4]})
b = pd.DataFrame({'c':[1,2,3,4,5,6,7],
'b':[8,9,0,1,2,3,4]})
li = [a,b]
for i in li:
'df_{}'.format(i) = i.rename(columns={'b':'test'})

a 和 b 输出:

a   b
0   1   8
1   2   9
2   3   0
3   4   1
4   5   2
5   6   3
6   7   4
c   b
0   1   8
1   2   9
2   3   0
3   4   1
4   5   2
5   6   3
6   7   4

预期产出:

a   test
0   1   8
1   2   9
2   3   0
3   4   1
4   5   2
5   6   3
6   7   4
c   test
0   1   8
1   2   9
2   3   0
3   4   1
4   5   2
5   6   3
6   7   4

谁能指出这里出了什么问题?我尝试在其他数据集上使用它,但没有任何变化,我不明白为什么。请帮忙。

顺便说一句,我想知道我是否可以为它起一个不同的名字,比如。 以上编辑?

rename中使用inplace=True

for i in li:
i.rename(columns={'b':'test'}, inplace=True) # Without assignment

输出:

a.head()
a  test
0  1     8
1  2     9
2  3     0
3  4     1
4  5     2
b.head()
c  test
0  1     8
1  2     9
2  3     0
3  4     1
4  5     2

重命名会创建一个新实例。

相反,请尝试:

for i in li:
i = i.rename(columns={'b':'test'}, inplace=True)

(编辑(:

看起来您正在转换的列正在复制的对象上叠加。以下解决方法应解决此问题:

for i in li:
f'df_{i}' = i.copy(deep=True)
f'df_{i}' = f'df_{i}'.rename(columns={'b':'test'})

最新更新