我有一个看起来像这样的DataFrame列表,
dfs
[
var1 var1
14.171250 13.593813
13.578317 13.595329
10.301850 13.580139
9.930217 13.593278
6.192517 13.561943
7.738100 13.565149
6.197983 13.572509,
var1 var2
2.456183 5.907528
5.052017 5.955731
5.960000 5.972480
8.039317 5.984608
7.559217 5.985348
6.933633 5.979438
...
]
我想将每个DataFrame中的var1
和var2
重命名为Foo
和Hoo
。
我tried以下,
renames_dfs = []
for df in dfs:
renames_dfs.append(df.rename(columns={'var1':'Foo','var2':'Hoo'},inplace = True))
这将返回None
的空列表。当我重命名列名时,我在这里犯了什么错误?
答案 0 :(得分:2)
你可以这样做。
[df.rename(columns={'var1':'Foo','var2':'Hoo'},inplace=True) for df in dfs]
输出:
[None,None]
<强> 但.... 强>
dfs
输出:
[ Foo Hoo
0 0.463904 0.765987
1 0.473314 0.609793
2 0.505549 0.449539
3 0.508157 0.444993
4 0.604366 0.368044, Foo Hoo
0 0.241526 0.225990
1 0.609949 0.454891
2 0.523094 0.443431
3 0.525026 0.714601
4 0.002260 0.763454]
答案 1 :(得分:1)
参数inplace=True
始终返回None
。
所以你可以使用:
renames_dfs = []
for df in dfs:
df.rename(columns={'var1':'Foo','var2':'Hoo'},inplace = True)
renames_dfs.append(df)
但我认为更好:
renames_dfs = []
for df in dfs:
renames_dfs.append(df.rename(columns={'var1':'Foo','var2':'Hoo'}))
答案 2 :(得分:1)
您现有的代码会返回None
,因为inplace=True
会更新现有的引用。
一个有效的解决方案是直接分配给df.columns
:
for df in dfs:
df.columns = ['foo', 'bar']
将更新同一列表中的所有数据框,而无需创建新列表。
如果要重命名所有列,则另一个选项是使用set_axis
:
df2 = [df.columns.set_axis(['foo', 'bar'], axis=1, inplace=False) for df in dfs]
如果仅重命名子集,请改用rename
。