我正在尝试删除位于df列名称部分结尾的子字符串_x。
样本df代码:
import pandas as pd
d = {'W_x': ['abcde','abcde','abcde']}
df = pd.DataFrame(data=d)
df['First_x']=[0,0,0]
df['Last_x']=[1,2,3]
df['Slice']=['abFC=0.01#%sdadf','12fdak*4%FC=-0.035faf,dd43','FC=0.5fasff']
Run Code Online (Sandbox Code Playgroud)
输出:
W_x First_x Last_x Slice
0 abcde 0 1 abFC=0.01
1 abcde 0 2 12fdak*4%FC=-0.035faf,dd43
2 abcde 0 3 FC=0.5fasff
Run Code Online (Sandbox Code Playgroud)
所需的输出:
W First Last Slice
0 abcde 0 1 abFC=0.01
1 abcde 0 2 12fdak*4%FC=-0.035faf,dd43
2 abcde 0 3 FC=0.5fasff
Run Code Online (Sandbox Code Playgroud)
Qui*_*2k1 14
我建议使用该rename功能:
df.rename(columns = lambda x: x.strip('_x'))
Run Code Online (Sandbox Code Playgroud)
输出符合要求
您还可以根据 Quang Hoang 的解决方案处理 FabienP 的评论和修改:
df.rename(columns = lambda x: x.replace('_x$', ''))
Run Code Online (Sandbox Code Playgroud)
给出所需的输出。
另一种解决方案很简单:
df.rename(columns = lambda x: x[:-2] if x.endswith('_x') else x)
Run Code Online (Sandbox Code Playgroud)
cs9*_*s95 10
使用str.strip/ rstrip:
# df.columns = df.columns.str.strip('_x')
# Or,
df.columns = df.columns.str.rstrip('_x') # strip suffix at the right end only.
df.columns
# Index(['W', 'First', 'Last', 'Slice'], dtype='object')
Run Code Online (Sandbox Code Playgroud)
为了避免注释中突出显示的问题:
如果任何列名以后缀_或x开头或结尾,请当心strip()。
您可以使用str.replace,
df.columns = df.columns.str.replace(r'_x$', '')
df.columns
# Index(['W', 'First', 'Last', 'Slice'], dtype='object')
Run Code Online (Sandbox Code Playgroud)
我通常使用 @cs95 方式,但为了方便起见,将其包装在数据框方法中:
import pandas as pd
def drop_prefix(self, prefix):
self.columns = self.columns.str.lstrip(prefix)
return self
pd.core.frame.DataFrame.drop_prefix = drop_prefix
Run Code Online (Sandbox Code Playgroud)
然后您可以将其与已在 pandas 中实现的逆方法一起使用add_prefix:
pd.drop_prefix('myprefix_')
Run Code Online (Sandbox Code Playgroud)
df.columns = [col[:-2] for col in df.columns if col[-2:]=='_x' else col]
Run Code Online (Sandbox Code Playgroud)
要么
df.columns = [col.replace('_x', '') for col in df.columns]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2570 次 |
| 最近记录: |