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

Kla*_*sos 59 python dataframe pandas

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

featuresA = myPandasDataFrame.columns.values + '_x'
Run Code Online (Sandbox Code Playgroud)

我该怎么做呢?另外,如果我想添加x_后缀,解决方案将如何变化?

Jar*_*zak 131

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

df = df.add_suffix('_some_suffix')
Run Code Online (Sandbox Code Playgroud)

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

  • 如果要为名称添加前缀,可以使用add_prefix. (12认同)
  • 太糟糕了,这不可能是可变的(即没有`inplace = True`参数选项).否则,完美. (6认同)

Ste*_*fan 82

你可以使用一种list理解:

df.columns = [str(col) + '_x' for col in df.columns]
Run Code Online (Sandbox Code Playgroud)

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


cs9*_*s95 14

优雅的原位串联

如果您尝试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
Run Code Online (Sandbox Code Playgroud)

df.columns += '_some_suffix'
df

   A_some_suffix  B_some_suffix
0              9             12
1              4              7
2              2              5
3              1              4
Run Code Online (Sandbox Code Playgroud)

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

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
Run Code Online (Sandbox Code Playgroud)

另一个便宜的选择是使用带有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
Run Code Online (Sandbox Code Playgroud)

对于前缀,类似地,

df.columns = [f'some_prefix{c}' for c in df]
Run Code Online (Sandbox Code Playgroud)

方法链接

在方法链接时也可以添加* 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
Run Code Online (Sandbox Code Playgroud)

这将返回数据的副本。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
Run Code Online (Sandbox Code Playgroud)

里面也没有修改df


批判 add_*fix

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

df.some_method1().some_method2().add_*fix(...)
Run Code Online (Sandbox Code Playgroud)

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

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

df.some_method1().some_method2().pipe(add_suffix)
Run Code Online (Sandbox Code Playgroud)

  • 这很优雅!如果您想向列的子集添加前缀或后缀,例如名称全部包含常用单词(如“new”或“old”)而不是每个列的列,该怎么办?谢谢。 (2认同)
  • @BowenLiu 我建议使用 df.rename() 代替......将字典映射名称传递给他们的新名称。然后使用axis = 1调用重命名。您还可以使用条件列表理解分配。 (2认同)
  • 您的`add_ * fix`评论非常重要,@ cs95。 (2认同)

jrr*_*eda 9

我知道向列名称添加后缀(或前缀)的 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')


Erf*_*fan 6

使用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
Run Code Online (Sandbox Code Playgroud)

使用renamewithaxis=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
Run Code Online (Sandbox Code Playgroud)

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

df = df.rename('col_{}'.format, axis=1)
Run Code Online (Sandbox Code Playgroud)

或使用inplace=True

df.rename('col_{}'.format, axis=1, inplace=True)
Run Code Online (Sandbox Code Playgroud)

  • 迄今为止最好的答案。它不会创建新对象,它允许您使用映射器根据需要格式化字符串。并且没有额外的代码行(单行是我的弱点) (2认同)

JPA*_*JPA 5

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

df.columns += '_x'
Run Code Online (Sandbox Code Playgroud)

您可以轻松适应前缀场景。