如何通过将df.str.split()与multipe分隔符一起使用来保留分隔符

时间:2019-06-20 12:21:15

标签: python string pandas split

我一直在使用的数据框有一个列,该列指示带有时区的日期时间,例如:2019-01-23T04:30:00 + 01:00。

                    Horodate
0  2019-01-23T04:30:00+01:00
1  2019-01-23T04:30:00+01:00
2  2019-01-23T04:30:00+01:00
3  2019-01-23T04:30:00-01:00

我想获取时区信息并将其放入另一个名为“ TimeZone”的列中。我可以通过应用此功能来做到这一点:

df["TimeZone"] = "+"  + df["Horodate"].str.split('[+]').str[1] 

这很好:

                    Horodate TimeZone
0  2019-01-23T04:30:00+01:00   +01:00
1  2019-01-23T04:30:00+01:00   +01:00
2  2019-01-23T04:30:00+01:00   +01:00
3  2019-01-23T04:30:00-01:00      NaN

,但仅对以“ +”开头的时区有效。我想找到一种方法来提取有关时区的全部信息,包括信号“ +”或“-”,并获得一个看起来像这样的数据框:

                    Horodate TimeZone
0  2019-01-23T04:30:00+01:00   +01:00
1  2019-01-23T04:30:00+01:00   +01:00
2  2019-01-23T04:30:00+01:00   +01:00
3  2019-01-23T04:30:00-01:00   -01:00

我认为我必须通过拆分多个分隔符,但问题是,如何在我需要拆分字符串的同时包括分隔符? 像这样切成字符串,我可以获得良好的结果:

df_test["TimeZone"] =  df_test["Horodate"].str[19:] 

但这不是通用的方法。 预先感谢。

3 个答案:

答案 0 :(得分:2)

只是字符串切片怎么样?

In [285]: df["TimeZone"] = df["Horodate"].str[-6:] 

In [286]: df
Out[286]: 
                    Horodate TimeZone
0  2019-01-23T04:30:00+01:00   +01:00
1  2019-01-23T04:30:00+01:00   +01:00
2  2019-01-23T04:30:00+01:00   +01:00
3  2019-01-23T04:30:00-01:00   -01:00

答案 1 :(得分:2)

您还可以将Series.str.extractregex模式一起使用:

df['TimeZone'] =  df['Horodate'].str.extract(r'([+-]\d{2}:\d{2})')

[出]

                    Horodate TimeZone
0  2019-01-23T04:30:00+01:00   +01:00
1  2019-01-23T04:30:00+01:00   +01:00
2  2019-01-23T04:30:00+01:00   +01:00
3  2019-01-23T04:30:00-01:00   -01:00

答案 2 :(得分:2)

str.sub允许使用正则表达式,因此您可以这样做:

df['Timezone'] = df.Horodate.str.replace('(.*)([+-])(.*)', r'\2\3')