2017-09-03 49 views
0

说我有我的熊猫数据框中列,看起来像这样:大熊猫数据框中列的字符串中的条件更换

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

用正则表达式替换将有助于你得到的输出

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 
+0

谢谢Bharath,这解决了我的问题! –

+0

很高兴帮助@MichielV。 。如果我的回答很有帮助,请不要忘记接受它 - 点击答案旁边的复选标记(✓),将其从灰色转为填充。快乐学习。 – Dark

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 
>>> 
+0

非常感谢你MedAli,我现在可以继续我的项目! –

+0

@MichielV。欢迎您:) – MedAli

0

可以使用str.replace用正则表达式

s.str.replace(r'[./-]$','') 

[./-]替换您想要替换的任何字符。 $表示匹配应该在字符串的末尾。

要更换“就地”使用Series.replace

s.replace(r'[./-]$','', inplace=True, regex=True) 
+0

感谢您的快速回复,这立即解决了我的问题! –

0

我能够从字符串的末尾中的列与所述下面的代码行中删除在数据帧大熊猫字符:

s.replace(r'[./-]$','',regex=True) 

凡在括号之间的所有条目([./-])表示的字符是删除和$表示他们应该从结尾删除

相关问题