我尝试使用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'})