シリーズにフォーマッタを適用すると、Series.dtからアクセスされる一連の日時プロパティの変更が表示されないのはなぜですか?その時点ですべてutcに戻りますか?パンダ:Series.dtの予期しない動作
(目的英国の夏の時間に時系列を表示することです)、次のサンプルコードを考えてみましょう:
import pandas as pd
import logging
import pytz
from pytz import timezone
date_format_string = "%a %b %d %Y %H:%M"
def convert_datetime(x) :
return x.strftime(date_format_string)
def longer_convert(x, tz = timezone('Europe/London')) :
return convert_datetime(pytz.utc.localize(x).astimezone(tz))
if __name__=="__main__" :
rng = pd.date_range('6/6/2011', periods=6, freq='H')
rng2 = pd.date_range('6/6/2011', periods=6, freq='D')
series = pd.Series(data=rng, index=rng2)
series.name = "Original"
converted_series = series.dt.tz_localize('UTC').dt.tz_convert('Europe/London')
converted_series.name = "Converted"
formatted_series = converted_series.apply(convert_datetime)
formatted_series.name = "Formatted"
longer_converted = series.apply(longer_convert)
longer_converted.name = "Using pytz"
df=pd.concat([series,converted_series,formatted_series, longer_converted], axis=1)
print df
出力:
シリーズはDTを使用して "変換" が、 .localiseが正しく出力され、Formattedの文字列フォーマット演算子を適用すると、時間はUTC時間に戻ります。私はこれを "Pytzを使って"という列のように振る舞い、新しいタイムゾーンで現地時間として列形式を出力することを期待していました。これはバグですか、この奇妙な理由がありますか?さらに奇妙
:
dt = df.iloc[3].get_value("Converted")
print dt
print convert_datetime(dt)
が正しく印刷さ04:00 + 1:00と午前4時、なぜ異なる動作を適用しないか、これは単なるバグですか?タイムゾーンのプロパティを取り除きます適用