如何为每个列名添加后缀(或前缀)?

时间:2015-12-02 17:51:29

标签: python pandas dataframe

我想为每个列名添加1 2 4 5 7 8 10 11后缀,如下所示:

_x

我该怎么做?另外,如果我想添加featuresA = myPandasDataFrame.columns.values + '_x' 作为后缀,解决方案将如何变化?

6 个答案:

答案 0 :(得分:111)

以下是我认为最好的添加后缀的方法。

df = df.add_suffix('_some_suffix')

因为它是在DataFrame上调用并返回DataFrame的函数 - 您可以在调用链中使用它。

答案 1 :(得分:64)

您可以使用list理解:

df.columns = [str(col) + '_x' for col in df.columns]

还有其他答案中提到的内置方法,如Here's the error i get in the compiler:.add_suffix()

答案 2 :(得分:7)

优雅的就地串联

如果您尝试就地修改df,那么最便宜(也是最简单)的选项是直接在df.columns上就地添加(即,使用Index.__iadd__)。

df = pd.DataFrame({"A": [9, 4, 2, 1], "B": [12, 7, 5, 4]})
df

   A   B
0  9  12
1  4   7
2  2   5
3  1   4

df.columns += '_some_suffix'
df

   A_some_suffix  B_some_suffix
0              9             12
1              4              7
2              2              5
3              1              4

要添加前缀,您将类似地使用

df.columns = 'some_prefix_' + df.columns
df

   some_prefix_A  some_prefix_B
0              9             12
1              4              7
2              2              5
3              1              4

另一种便宜的选择是使用f-string格式的列表理解(在python3.6 +上可用)。

df.columns = [f'{c}_some_suffix' for c in df]
df

   A_some_suffix  B_some_suffix
0              9             12
1              4              7
2              2              5
3              1              4

对于前缀,类似地,

df.columns = [f'some_prefix{c}' for c in df]

方法链接

也可以在方法链接时添加* fix。要添加后缀,请使用DataFrame.add_suffix

df.add_suffix('_some_suffix')

   A_some_suffix  B_some_suffix
0              9             12
1              4              7
2              2              5
3              1              4

这将返回数据的副本。 IOW,df未修改。

添加前缀也可以使用DataFrame.add_prefix

df.add_prefix('some_prefix_')

   some_prefix_A  some_prefix_B
0              9             12
1              4              7
2              2              5
3              1              4

这也不会修改df


add_*fix的评论

如果您要执行方法链接,这些是好的方法:

df.some_method1().some_method2().add_*fix(...)

但是,add_prefix(和add_suffix)创建了整个数据帧的副本,只是为了修改标题。如果您认为这样做很浪费,但仍然希望进行链接,则可以致电pipe

def add_suffix(df):
    df.columns += '_some_suffix'
    return df

df.some_method1().some_method2().pipe(add_suffix)

答案 3 :(得分:1)

我知道4种为列名添加后缀(或前缀)的方法:

1- df.columns = [str(col) + '_some_suffix' for col in df.columns]

2- df.rename(columns= lambda col: col+'_some_suffix')

3- df.columns += '_some_suffix'非常消遣。

或者,最好的:

3- df.add_suffix('_some_suffix')

答案 4 :(得分:0)

我没有看到上面提出的解决方案,因此将其添加到列表中:

df.columns += '_x'

您可以轻松适应前缀方案。

答案 5 :(得分:0)

使用DataFrame.rename.

弃用add_prefixadd_suffix

在未来的熊猫版本中,add_prefixadd_suffix将是deprecated。建议的新方法是使用DataFrame.rename

df = pd.DataFrame({'A': range(3), 'B': range(4, 7)})
print(df)
   A  B
0  0  4
1  1  5
2  2  6

renameaxis=1和字符串格式一起使用:

df.rename('col_{}'.format, axis=1)
# or df.rename(columns='col_{}'.format)

   col_A  col_B
0      0      4
1      1      5
2      2      6

要实际覆盖您的列名,我们可以将返回的值分配给我们的df

df = df.rename('col_{}'.format, axis=1)

或使用inplace=True

df.rename('col_{}'.format, axis=1, inplace=True)