2017-06-08 14 views
0
>>> df 
         Time 
    5/10/2017 (135) 01:05:03 
    5/11/2017 (136) 04:05:06 

给定一个输入日期,如这在一个DataFrame中,我将如何删除朱利安日期,(135)和(136),并删除中间的空白,以便输出样子:熊猫删除字符串的一部分

>>> df 
         Time 
    5/10/2017 01:05:03 
    5/11/2017 04:05:06 

我已经试过:

df['Time'].replace('(135)','', regex=True, inplace=True) 

,输出:

>>> df 
        Time 
0 5/10/2017() 01:05:03 

我想知道我在这里做错了什么。

回答

2

您可以通过正则表达式使用replace

首先需要通过\逃避()因为特殊字符在正则表达式,然后通过\d+和最后一场比赛后)零个或多个空格通过\s*匹配所有整数。


df['Time'] = df['Time'].str.replace("\(\d+\)\s*", '') 
print (df) 
       Time 
0 5/10/2017 01:05:03 
1 5/11/2017 04:05:06 

如果需要转换成datetime:

df['Time'] = pd.to_datetime(df['Time'].str.replace("\(\d+\)\s*", '')) 
print (df) 
       Time 
0 2017-05-10 01:05:03 
1 2017-05-11 04:05:06 

编辑:

在你的样品是mising逃逸字符\和可能使用,而不是\d+[0-9]+

df['Time'].replace('\([0-9]+\)\s*','', regex=True, inplace=True) 
print (df) 
       Time 
0 5/10/2017 01:05:03 
1 5/11/2017 04:05:06 
+0

太棒了,有效!你能描述一下str.replace()中的反斜杠和d +值以及它们是如何使用的,或者如果有关于如何使用该输入的文档?谢谢! –

+0

不幸的是,正则表达式的问题是非常巨大的,在熊猫文档只是一些样本[这里](http://pandas.pydata.org/pandas-docs/stable/text.html#extract-first-match-in-each-subject -extract) - 它是关于提取,但与'str.replace'类似的作品。 – jezrael

+0

精彩,欢呼。 –