重命名数据框列表中的列?

时间:2017-07-22 19:25:02

标签: python pandas dataframe rename

我有一个看起来像这样的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中的var1var2重命名为FooHoo。 我tried以下,

renames_dfs = []
for df in dfs:
    renames_dfs.append(df.rename(columns={'var1':'Foo','var2':'Hoo'},inplace = True))

这将返回None的空列表。当我重命名列名时,我在这里犯了什么错误?

3 个答案:

答案 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