我试图删除位于我的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
7条答案
按热度按时间4ngedf3f1#
python〈3.9,pandas〈1.4
使用
str.strip
/rstrip
:为了避免评论中强调的问题:
如果任何列名的后缀以_或x开头或结尾,请注意strip()。
你可以用
str.replace
更新:python〉= 3.9,pandas〉= 1.4
从1.4版开始,您很快就可以使用
str.removeprefix
/str.removesuffix
。示例:
wfveoks02#
或
guz6ccqo3#
我建议使用
rename
函数:输出符合要求
你自己也可以照顾FabienP的评论和修改,如果根据Quang Hoang的解决方案:
给出所需的输出。
另一个解决方案很简单:
cedebl8k4#
我通常使用@cs95方式,但为了方便起见,我将其 Package 在 Dataframe 方法中:
然后你可以像pandas
add_prefix
中已经实现的inverse方法一样使用它:ocebsuys5#
Python=3.8,Pandas=1.3:
使用
df.columns = df.columns.str.replace('_x','')
去掉后缀。这样做效果很好,只从列名中删除确切的子字符串(后缀)
'_x'
,而不是str.strip/str.rstrip(substring)
,它从DataFrame的列名中删除substring
中提到的所有字符,而不管列名中是否存在完整的子字符串,这些字符出现的顺序等。2hh7jdfx6#
在Python 3.9+中,你可以使用字符串方法
removesuffix()
和removeprefix()
,如下所示:或者,您可以直接Map到列,如下所示:
wgx48brx7#
我有一个类似的请求,需要去掉列标题的前缀。在我的例子中,前缀有这样的模式:* *'p1-','p2-','p3-'**等等,所以我使用下面的代码片段来删除它们: