Python替换数据框列中的部分字符串

时间:2019-02-19 02:04:15

标签: python pandas dataframe replace

我有一个类似于以下内容的数据框:-

df = pd.DataFrame(data={'Date':['12/05/2014', '12/05.2015', '12/05//2016'], 'Day':['Monday','Tuesday','Thursday']})

          Date       Day
0   12/05/2014    Monday
1   12/05.2015   Tuesday
2  12/05//2016  Thursday

我想清除日期列,其中某些日期的格式不正确。日期为字符串格式,清洗后将转换为日期格式。

我从其他stackoverfolw帖子中找到了一些帮助,并尝试了以下操作:-

1. Loop method

   for idx, row in df.iterrows():
       if '.' in df.loc[idx,'Date']:
           df.loc[idx,'Date'].replace('.','/')

2. Regex method

   df.Date.replace({'.','/'}, regex=True)

以上方法均未返回所需格式的日期,也未返回数据框。还有另一种可行的方法吗?

还有,有没有一种方法可以用一个命令用正确的字符串('/')替换两种字符串('。'和'//')?

2 个答案:

答案 0 :(得分:1)

我会用replace来做到这一点:

df['Date'].replace(r'\D+', '/', regex=True)

0    12/05/2014
1    12/05/2015
2    12/05/2016
Name: Date, dtype: object

df['Date'] = pd.to_datetime(df['Date'].replace(r'\D+', '/', regex=True))
df

        Date       Day
0 2014-12-05    Monday
1 2015-12-05   Tuesday
2 2016-12-05  Thursday

或者,str.replace

pd.to_datetime(df['Date'].str.replace(r'\D+', '/'))

0   2014-12-05
1   2015-12-05
2   2016-12-05
Name: Date, dtype: datetime64[ns]

模式\D+将匹配不是数字的字符序列,并用一个正斜杠(这就是您想要的)替换所有字符。


另一个选择是extractall,只是为了好玩。

pd.to_datetime(df['Date'].str.extractall(r'(\d+)')[0]
                         .unstack()
                         .set_axis(['month', 'day', 'year'], inplace=False, axis=1))

0   2014-12-05
1   2015-12-05
2   2016-12-05
dtype: datetime64[ns]

答案 1 :(得分:0)

您可以在“日期”列上使用.str API,以单个斜杠替换点或多个斜杠。 .str.replace默认使用正则表达式。

df.Date.str.replace(r'[\./]+', '/')