2

米国/東部時間のファイルを、時間をインデックスとしてデータフレームに読み込もうとしています。2008 年 11 月 2 日が DST の切り替え日であるとすると、2 つの時間 1 があります (順序は、どの時間が夏時間か標準かを示します)。ローカライズしようとすると、これらがあいまいであるため、コードは失敗します。現在、pytz モジュールには、日付が dst であるかどうかを示す方法があり、これはここで役立ちますが、それが pandas によって公開されているかどうかは明らかではありません。1 つの解決策は、read_csv の date_parser 関数を作成することですが、ローカライズされた DatetimeIndex を達成するために他の pandas 関数を使用する方法はありますか? ありがとう。

from pandas import read_csv, DatetimeIndex
from StringIO import StringIO

test = 'Time,Number\n\
11/02/2008 00:00, 1\n\
11/02/2008 01:00, 2\n\
11/02/2008 01:00, 3\n\
11/02/2008 02:00, 4\n\
11/02/2008 03:00, 5\n\
11/02/2008 04:00, 6\n'

df = read_csv(StringIO(test), parse_dates=[0]) #read in the csv
di = DatetimeIndex(df['Time']) # create a datetime index
di.tz_localize('US/Eastern') # try to localize to current timezone
File "/lib/python2.7/site-packages/pandas/tseries/index.py", line 1463, in tz_localize
new_dates = tslib.tz_localize_to_utc(self.asi8, tz)
File "tslib.pyx", line 1561, in pandas.tslib.tz_localize_to_utc (pandas/tslib.c:24350)
AmbiguousTimeError: 2008-11-02 01:00:00

望ましい出力は次のとおりです。

<class 'pandas.tseries.index.DatetimeIndex'>
[2008-11-02 00:00:00, ..., 2008-11-02 04:00:00]
Length: 6, Freq: H, Timezone: US/Eastern
dr.values
array(['2008-11-02T00:00:00.000000000-0400',
   '2008-11-02T01:00:00.000000000-0400',
   '2008-11-02T01:00:00.000000000-0500',
   '2008-11-02T02:00:00.000000000-0500',
   '2008-11-02T03:00:00.000000000-0500',
   '2008-11-02T04:00:00.000000000-0500'], dtype='datetime64[ns]')
4

1 に答える 1