我运行一个程序:
# 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检查这个正则表达式。但我不知道问题出在哪里
答案 0 :(得分: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
答案 1 :(得分:1)
您可以简化正则表达式。
df.date.str.replace('^(\d+-\d+)(-\d+)?.*',r'\1\2')
参见演示。