我正在从Java源读取数据。我最终得到以下数据框:
df.head()
open timestamp
0 1.13550 2019-02-24T17:00-06:00[US/Central]
1 1.13570 2019-02-24T17:05-06:00[US/Central]
2 1.13560 2019-02-24T17:10-06:00[US/Central]
3 1.13565 2019-02-24T17:15-06:00[US/Central]
4 1.13570 2019-02-24T17:20-06:00[US/Central]
df.dtypes
open float64
timestamp object
dtype: object
如何在Pandas中将带有时区的列时间戳转换为Datetime? 熊猫有这种东西吗?
我找到了这篇文章,但它似乎无法解析时区,请稍后再添加时区。 How to read datetime with timezone in pandas
欢迎任何帮助/提示
答案 0 :(得分:1)
您可以尝试删除[...]
部分,然后将其传递给to_datetime
:
pd.to_datetime(df.timestamp.str.extract('(.*)\[.*\]')[0])
返回:
0 2019-02-24 17:00:00-06:00
1 2019-02-24 17:05:00-06:00
2 2019-02-24 17:10:00-06:00
3 2019-02-24 17:15:00-06:00
4 2019-02-24 17:20:00-06:00
Name: 0, dtype: datetime64[ns, pytz.FixedOffset(-360)]
您可以通过在正则表达式模式中再添加一个捕获组来保留时区标签:
pattern = '(?P<time>.*)\[(?P<zone>.*)\]'
new_df = df.timestamp.str.extract(pattern)
然后new_df
是:
time zone
0 2019-02-24T17:00-06:00 US/Central
1 2019-02-24T17:05-06:00 US/Central
2 2019-02-24T17:10-06:00 US/Central
3 2019-02-24T17:15-06:00 US/Central
4 2019-02-24T17:20-06:00 US/Central
您可以将time
转换为pd.to_datetime
。
答案 1 :(得分:1)
单向
pd.to_datetime(df.timestamp.str.split('[').str[0])
Out[137]:
0 2019-02-24 17:00:00-06:00
1 2019-02-24 17:05:00-06:00
2 2019-02-24 17:10:00-06:00
3 2019-02-24 17:15:00-06:00
4 2019-02-24 17:20:00-06:00
Name: timestamp, dtype: datetime64[ns, pytz.FixedOffset(-360)]