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

我想为每个列名添加 _x后缀,如下所示:

featuresA = myPandasDataFrame.columns.values + '_x'

此外,如果我想添加 x_作为后缀,解决方案将如何改变?

159023 次浏览

你可以使用 list理解:

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

还有另一个答案中提到的内置方法,如 .add_suffix().add_prefix()

在我看来,以下是添加后缀的最好方法。

df = df.add_suffix('_some_suffix')

由于它是在 DataFrame 上调用并返回 DataFrame 的函数,因此可以在调用链中使用它。

优雅的就地连接

如果您试图就地修改 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]

方法链接

还可以在方法链接时添加 * 修复

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)

我还没有看到上面提到的这个解决方案,所以把它添加到列表中:

df.columns += '_x'

您可以很容易地适应前缀场景。

我知道在专栏名称中添加后缀(或前缀)的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')

使用 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

使用带有 axis=1和字符串格式的 rename:

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)

我想这就是我经常使用的方法,例如:

df = pd.DataFrame({'silverfish': range(3), 'silverspoon': range(4, 7),
'goldfish': range(10, 13),'goldilocks':range(17,20)})


我动态重命名的方式:

color_list = ['gold','silver']


for i in color_list:
df[f'color_{i}']=df.filter(like=i).sum(axis=1)

产出:

{'silverfish': {0: 0, 1: 1, 2: 2},
'silverspoon': {0: 4, 1: 5, 2: 6},
'goldfish': {0: 10, 1: 11, 2: 12},
'goldilocks': {0: 17, 1: 18, 2: 19},
'color_gold': {0: 135, 1: 145, 2: 155},
'color_silver': {0: 20, 1: 30, 2: 40}}

熊猫也有一个 add_prefix和一个 add_suffix方法来做这个。