【发布时间】:2016-03-07 02:24:20
【问题描述】:
我想为每个列名添加_x 后缀,如下所示:
featuresA = myPandasDataFrame.columns.values + '_x'
我该怎么做?另外,如果我想添加x_ 作为后缀,解决方案将如何变化?
【问题讨论】:
我想为每个列名添加_x 后缀,如下所示:
featuresA = myPandasDataFrame.columns.values + '_x'
我该怎么做?另外,如果我想添加x_ 作为后缀,解决方案将如何变化?
【问题讨论】:
我认为这是我经常使用的,例如:
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}}
【讨论】:
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
将rename 与axis=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)
【讨论】:
我知道在列名称中添加后缀(或前缀)的 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')
【讨论】:
我还没有看到上面提出的这个解决方案,所以将它添加到列表中:
df.columns += '_x'
而且您可以轻松适应前缀场景。
【讨论】:
df = pd.DataFrame([[1,2,3]]*10) --> df.columns,那么您将使用 df.add_suffix('_x')
您可以使用list 理解:
df.columns = [str(col) + '_x' for col in df.columns]
还有另一个答案中提到的.add_suffix() 和.add_prefix() 等内置方法。
【讨论】:
如果您尝试就地修改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]
还可以在方法链接时添加 *fixes。要添加后缀,请使用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)
【讨论】:
new 或old)而不是每一列的列?谢谢。
df = pd.DataFrame([[1,2,3]]*10) --> df.columns,那么您将使用 df.add_suffix('_x')
df.columns = df.columns.astype(str) + '_x' 。
以下是我认为最好的添加后缀的方法。
df = df.add_suffix('_some_suffix')
因为它是在 DataFrame 上调用并返回 DataFrame 的函数 - 您可以在调用链中使用它。
【讨论】:
inplace=True 参数选项)。否则,完美。