我正在尝试删除位于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']
输出:
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
所需的输出:
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
答案 0 :(得分:5)
使用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')
为避免评论中突出显示的问题,
如果任何列名以_或_开头或结尾,请注意strip() x超出后缀。
您可以使用str.replace
,
df.columns = df.columns.str.replace(r'_x$', '')
df.columns
# Index(['W', 'First', 'Last', 'Slice'], dtype='object')
答案 1 :(得分:4)
df.columns = [col[:-2] for col in df.columns if col[-2:]=='_x' else col]
或
df.columns = [col.replace('_x', '') for col in df.columns]
答案 2 :(得分:1)
我建议使用rename
函数:
setAttribute()
输出是所需的
根据Quang Hoang的解决方案,您还可以照顾FabienP的评论并进行修改:
df.rename(columns = lambda x: x.strip('_x'))
提供所需的输出。
另一个解决方案很简单:
df.rename(columns = lambda x: x.replace('_x$', ''))
答案 3 :(得分:1)
我通常使用@ 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
然后,您可以将其与已在熊猫add_prefix
中实现的逆方法一起使用:
pd.drop_prefix('myprefix_')
答案 4 :(得分:0)
在 Python 3.9+ 中,您可以使用字符串方法 removesuffix()
和 removeprefix()
,如下所示:
df.columns = df.rename(columns = lambda x: x.removesuffix('_x')) # or any suffix per say
df.columns = df.rename(columns = lambda x: x.removeprefix('prefix_i_want_to_remove'))
或者你可以直接映射到列上:
df.columns = df.columns.map(lambda x: x.removesuffix('_x')) # or any suffix per say
df.columns = df.columns.map(lambda x: x.removeprefix('prefix_i_want_to_remove'))