我试图通过使用for循环来对我拥有的所有Dataframe执行一些进程,不做任何更改。
代码:
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
有人能指出这里出了什么问题吗?我试着在其他数据集上使用它,但是没有什么变化,我不明白为什么。请帮帮忙。
顺便说一句,我想知道我是否能给它取一个不同的名字。以上编辑?
发布于 2020-01-20 02:14:45
在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
发布于 2020-01-20 02:15:29
重命名将创建一个新实例。
相反,试着:
for i in li:
i = i.rename(columns={'b':'test'}, inplace=True)
发布于 2020-01-20 02:17:29
(编辑):
看起来,您正在转换的列正在复制的对象上得到叠加。以下解决办法应解决这一问题:
for i in li:
f'df_{i}' = i.copy(deep=True)
f'df_{i}' = f'df_{i}'.rename(columns={'b':'test'})
https://stackoverflow.com/questions/59816196
复制相似问题