使用 Pandas 读取 csv 时如何指定时区信息

How to specify time zone information when reading a csv with Pandas

我有一个 csv 文件,其中包含以 CAT(中非时间)给出的时间戳。当我使用 pandas 数据框将其读入时:

df = pd.read_csv(path, parse_dates=["timestamp"], dayfirst=True)

我收到一个错误:

C:\Users..\lib\site-packages\dateutil\parser_parser.py:1218: UnknownTimezoneWarning: tzname CAT identified but not understood. Pass tzinfos argument in order to correctly return a timezone-aware datetime. In a future version, this will raise an exception. category=UnknownTimezoneWarning)

这似乎表明我需要传递一个参数 tzinfos,但据我所知,它没有在 Pandas 文档中列为 read_csv 的选项。我尝试了两个:

df = pd.read_csv(path, parse_dates=["timestamp"], dayfirst=True, tzinfos={"CAT": "Etc/GMT+2"})
df = pd.read_csv(path, parse_dates=["timestamp"], dayfirst=True, tzinfos= "Etc/GMT+2")

但我一直收到错误消息:

TypeError: read_csv() got an unexpected keyword argument 'tzinfos'

现在它只是一个警告,它仍然将其作为无时区数据点读入,我可以通过以下方式添加正确的时区信息:df.timestamp.dt.tz_localize("Etc/GMT+2"),但是警告说“在未来的版本,这会引发异常”让我觉得我的代码将来会崩溃,所以我宁愿现在就修复它。

我尝试在谷歌上搜索解决方案,但所有结果似乎都与一般日期时间转换有关,而不是读取 csv(我无法弄清楚结果如何转换)。

阅读文档:https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.read_csv.html

pandas1.3 pd.read_csv().

中没有tzinfos参数

tzinfosdateutil's parser, which is used by pandas internally to parse the date/time strings. It cannot be supplied to pd.read_csv (or pd.to_datetime) 的直接参数,afaik。

相反,您可以在不解析日期的情况下读取 csv,导入解析器,并将其与 kwarg 一起应用,例如:

import pandas as pd
from dateutil import parser, tz

s = pd.Series(["01-Apr-17 12:00:00 AM CAT"])

# use tzfile Africa/Maputo for CAT:
s.apply(parser.parse, tzinfos={"CAT": tz.gettz("Africa/Maputo")})

0   2017-04-01 00:00:00+02:00
dtype: datetime64[ns, tzfile('/usr/share/zoneinfo/Africa/Maputo')]