如何在pandas中读取带有时区的日期时间

pal*_*las 14 python datetime pandas

我正在尝试从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";
Run Code Online (Sandbox Code Playgroud)

这是带时区的日期时间!我已经用过像

df1 = DataFrame(pd.read_csv(PeriodC, sep=';', parse_dates=[0], index_col=0))
Run Code Online (Sandbox Code Playgroud)

但结果是

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
Run Code Online (Sandbox Code Playgroud)

任何人都可以解释我如何从时区分离日期时间?

Vik*_*kez 16

如果时区信息可用,Pandas解析器会考虑时区信息,并给你一个天真的时间戳(天真==没有时区信息),但考虑到时区偏移.

要将时区信息保存在DataFrame中,首先应将Timestamps本地化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')
Run Code Online (Sandbox Code Playgroud)

如果要完全丢弃时区信息,则只需指定一个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)
Run Code Online (Sandbox Code Playgroud)