说我的Pandas Dataframe中有一个列如下:
s = pd.Series(["ab-cd.", "abc", "abc-def/", "ab.cde", "abcd-"])
我想使用此列进行模糊匹配,因此我想删除字符('。',' /',' - ' )但只在每个字符串的末尾,所以它看起来像这样:
s = pd.Series(["ab-cd", "abc", "abc-def", "ab.cde", "abcd"])
到目前为止,我开始很简单,所以不是生成一个包含我想删除的字符的列表,而是只重复执行不同字符的命令,如:
if s.str[-1] == '.':
s.str[-1].replace('.', '')
但这只会产生错误。如何获得我想要的结果,即最后没有字符的字符串(需要保留字符串其余部分中的字符)?
答案 0 :(得分:2)
替换为正则表达式将帮助您获得输出
s.replace(r'[./-]$','',regex=True)
或借助申请寻找替代方案
s.apply(lambda x :x[:-1] if x[-1] is '.' or '-' or '/' else x)
0 ab-cd 1 abc 2 abc-def 3 ab.cde 4 abcd dtype: object
答案 1 :(得分:0)
您可以将str.replace与正则表达式一起使用:
>>> s = pd.Series(["ab-cd.", "abc", "abc-def/", "ab.cde", "abcd-"])
>>> s.str.replace("\.$|/$|\-$","")
0 ab-cd
1 abc
2 abc-def
3 ab.cde
4 abcd
dtype: object
>>>
可以简化为:
>>> s.str.replace("[./-]$","")
0 ab-cd
1 abc
2 abc-def
3 ab.cde
4 abcd
dtype: object
>>>
答案 2 :(得分:0)
您可以将str.replace
与正则表达式
s.str.replace(r'[./-]$','')
在[./-]
内替换您要替换的任何字符。 $
表示匹配应位于字符串的末尾。
要替换“就地”,请使用Series.replace
s.replace(r'[./-]$','', inplace=True, regex=True)
答案 3 :(得分:0)
我能够使用以下代码行从pandas DataFrame的列中的字符串末尾删除字符:
s.replace(r'[./-]$','',regex=True)
括号中的所有条目([./-])表示要删除的字符,$表示应从末尾删除