如何在熊猫中读取带时区的日期时间

新手上路,请多包涵

我正在尝试从 csv 创建一个数据框,它的第一列就像

"2013-08-25T00:00:00-0400";
"2013-08-25T01:00:00-0400";
"2013-08-25T02:00:00-0400";
"2013-08-25T03:00:00-0400";
"2013-08-25T04:00:00-0400";

这是带时区的日期时间!我已经用过类似的东西

df1 = DataFrame(pd.read_csv(PeriodC, sep=';', parse_dates=[0], index_col=0))

但结果是

2013-09-02 04:00:00
2013-09-03 04:00:00
2013-09-04 04:00:00
2013-09-05 04:00:00
2013-09-06 04:00:00
2013-09-07 04:00:00
2013-09-08 04:00:00

谁能解释一下如何将日期时间与时区分开?

原文由 palas 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 308
1 个回答

Pandas 解析器将考虑时区信息(如果可用),并为您提供原始时间戳(原始 == 无时区信息),但会考虑时区偏移量。

要将时区信息保留在您的 DataFrame 中,您应该首先将时间戳本地化为 UTC 然后将它们转换为它们的时区(在本例中为 Etc/GMT+4 ):

 >>> df = pd.read_csv(PeriodC, sep=';', parse_dates=[0], index_col=0)
>>> df.index[0]
>>> Timestamp('2013-08-25 04:00:00', tz=None)
>>> df.index = df.index.tz_localize('UTC').tz_convert('Etc/GMT+4')
>>> df.index[0]
Timestamp('2013-08-25 00:00:00-0400', tz='Etc/GMT+4')

如果要完全丢弃时区信息,则只需指定 date_parser 拆分字符串并仅将日期时间部分传递给解析器。

 >>> df = pd.read_csv(file, sep=';', parse_dates=[0], index_col=[0]
                     date_parser=lambda x: pd.to_datetime(x.rpartition('-')[0]))
>>> df.index[0]
Timestamp('2013-08-25 00:00:00', tz=None)

原文由 Viktor Kerkez 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题