在pandas dataframe列的字符串中进行条件替换

时间:2017-09-03 10:20:03

标签: python string pandas replace slice

说我的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('.', '')

但这只会产生错误。如何获得我想要的结果,即最后没有字符的字符串(需要保留字符串其余部分中的字符)?

4 个答案:

答案 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)

括号中的所有条目([./-])表示要删除的字符,$表示应从末尾删除