我一直在使用的数据框有一个列,该列指示带有时区的日期时间,例如: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:]
但这不是通用的方法。 预先感谢。
答案 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.extract
与regex
模式一起使用:
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')