如何用Pandas的时区读取日期时间

2024-03-29 14:14:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图从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

有人能给我解释一下如何把日期时间和时区分开吗?


Tags: csv数据dataframereadindexparse时间col
3条回答

如果您正在使用pandas,则可以尝试

df['time'] = pd.to_datetime(df['time'])

Pandas解析器将考虑时区信息(如果可用),并给您一个简单的时间戳(naive==no timezone info),但要考虑时区偏移量。

要将时区信息保留在数据帧中,首先应将时间戳本地化为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,它将拆分字符串并只将datetime部分传递给解析器。

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

来自https://stackoverflow.com/a/18912631/4318671x.rpartition('-')不太好。

从infloxdb获取的带有“Asia/Shanghai”的datetime的字符串格式为:

2019-09-09T12:51:54.46303+08:00

相关问题 更多 >