2016-12-21 45 views
4

我运行一个程序:大熊猫str.replace得到什么

# encoding=utf-8 
import pandas 
df=pandas.DataFrame([['11-20','a',1],['10-20  更新于16-10-20 18:07','b',2],['15-12-27','c',3],['15-10-26  更新于10-26 23:52','d',4]],columns=['date','name','type']) 
df.date=df.date.str.replace('^(\d+)(-)(\d+)((-)\d+){0,1}(.*)','\1\2\3\4') 
print df 

这是结果:

date name type 
0   a  1 
1   b  2 
2   c  3 
3   d  4 

我想要得到的结果是:

 date name type 
0  11-20 a  1 
1  10-20 b  2 
2 15-12-27 c  3 
3 15-10-26 d  4 

我还检查了这正则表达式为https://regex101.com/r/apIT0O/8。但我不知道问题出在哪里

回答

1

你需要作出更换组文字:

df.date.str.replace('^(\d+)(-)(\d+)((-)(\d+)){0,1}(.*)',r'\1\2\3\4') 

#0  11-20 
#1  10-20 
#2 15-12-27 
#3 15-10-26 
#Name: date, dtype: object 

或者您可以使用双反斜线:

df.date.str.replace('^(\d+)(-)(\d+)((-)(\d+)){0,1}(.*)', '\\1\\2\\3\\4') 

不使用正则表达式,你也可以在一个空白区域分割并取第一个元素:

df.date.str.split(" ").str[0] 

#0  11-20 
#1  10-20 
#2 15-12-27 
#3 15-10-26 
#Name: date, dtype: object 
+0

是的,它的工作原理。但是df.date.str.replace('^(\ d +)( - )(\ d +)(( - )(\ d +)){0,1}(。*)','\\ 1 \\ 2 \\ 3 \\ 4')只适用于python 3。+。你能告诉我区别吗?谢谢! – pang2016