我尝试使用for循环对所有数据帧执行一些处理,而无需进行任何更改。
代码:
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
谁能指出这里出了什么问题?我尝试在其他数据集上使用它,但是没有任何变化,我也不明白为什么。请帮忙。
顺便说一句,我想知道是否可以为它起一个不同的名字。上面编辑过吗?
答案 0 :(得分:3)
在inplace=True
中使用rename
:
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
答案 1 :(得分:0)
重命名将创建一个新实例。
代替尝试:
for i in li:
i = i.rename(columns={'b':'test'}, inplace=True)
答案 2 :(得分:0)
(编辑):
看起来您要转换的列正与复制的对象叠加。以下变通办法应解决此问题:
for i in li:
f'df_{i}' = i.copy(deep=True)
f'df_{i}' = f'df_{i}'.rename(columns={'b':'test'})