2016-04-04 12 views
1

シリーズにフォーマッタを適用すると、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 

出力:

enter image description here

シリーズはDTを使用して "変換" が、 .localiseが正しく出力され、Formattedの文字列フォーマット演算子を適用すると、時間はUTC時間に戻ります。私はこれを "Pytzを使って"という列のように振る舞い、新しいタイムゾーンで現地時間として列形式を出力することを期待していました。これはバグですか、この奇妙な理由がありますか?さらに奇妙

dt = df.iloc[3].get_value("Converted") 
print dt 
print convert_datetime(dt) 

が正しく印刷さ04:00 + 1:00と午前4時、なぜ異なる動作を適用しないか、これは単なるバグですか?タイムゾーンのプロパティを取り除きます適用

答えて

1

それは18.0パンダのようには既知のバグですが判明し、作業ソリューションが

converted_series.dt.strftime(date_format_string) 

ではなくを行うことですseries.dt.localize

てapplyed strftimeがdatetimeのプロパティを正しく認識しているので、applyを使用します。