20

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

datetime を timezone から分離する方法を誰かに説明してもらえますか?

4

4 に答える 4

26

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、文字列を分割して日時部分のみをパーサーに渡す a を指定するだけです。

>>> 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)
于 2013-09-20T08:57:13.673 に答える