Series.dt aracılığıyla erişilen bir serinin datetime özelliklerinde yapılan değişiklikler, diziye bir biçimlendirici uygularken görünmüyor, bu noktadan sonra utc'ye dönüşüyor?Pandalar: Series.dt'nin beklenmeyen davranışı
(görevi ingiliz yaz aylarında bir zaman serilerini göstermektir) Aşağıdaki kod örneği ele alalım:
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
Çıktı:
"Dönüştürülen" serisi dt kullanarak rağmen .localise doğru yazdırır, dize biçiminde işleç biçimlendirilmiş olarak biçimlendirildiğinde, zamanların UTC zamanlarına dönmesine neden olur. Bunun, "pytz kullanma" sütunu gibi davranmasını ve sütun saatini yeni saat diliminde yerel saat olarak yayınlamasını bekledim. Bu bir hatadır mı yoksa bu tuhaflığın bir sebebi var mı? Daha da garibi
:
dt = df.iloc[3].get_value("Converted")
print dt
print convert_datetime(dt)
doğru 04 yazdırır: 00 + 1: 00 ve 04:00 öyleyse neden farklı davranır geçerlidir Yoksa bu sadece bir hata olduğunu?