【问题标题】:Timestamp with timezone column in PandasPandas 中带有时区列的时间戳
【发布时间】:2019-11-20 14:04:19
【问题描述】:

我正在从 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 中将列时间戳转换为带有时区的日期时间? Pandas 有这样的东西吗?

我找到了这篇文章,但它似乎没有解析时区,只是稍后添加一个时区。 How to read datetime with timezone in pandas

欢迎任何帮助/提示

【问题讨论】:

    标签: python pandas datetime timezone


    【解决方案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

    【讨论】:

    • 与 WeNYoBen 的回答相同的评论。这样做不会丢失时区吗? -06:00 没有唯一地定义时区,它只是定义了一个 GMT 偏移量。
    • 您没有提到要保留时区。但这很容易解决。
    • 谢谢,我真的很好奇时区是否可以作为日期时间对象的一部分嵌入。与 Python 相同(例如:stackoverflow.com/questions/4530069/…
    【解决方案2】:

    一种方式

    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)]
    

    【讨论】:

    • 这样做不会丢失时区吗? -06:00 没有唯一地定义时区,它只是定义了一个 GMT 偏移量。
    猜你喜欢
    • 1970-01-01
    • 2019-01-28
    • 2021-02-08
    • 2016-07-21
    • 1970-01-01
    • 2019-11-08
    • 2016-11-11
    • 1970-01-01
    • 2015-08-27
    相关资源
    最近更新 更多