2017-01-18 3 views
3

Läßt den folgenden Datenrahmen betrachtet Spanning 10.00 16 bis 4 Uhr am Jan:Python Pandas: Reindex Datenrahmen nach der Zeitzone Umwandlung

date_range1 = pd.date_range(dt(2017,1,16,10), dt(2017,1,16, 20), freq='2H') 
df = pd.DataFrame(data = np.random.rand(len(date_range1),2), index = date_range1) 

I indiziere es mit einem etwas längeren DateTimeindex Spanning 12.00 bis 23.00 und erhält das gewünschte Ergebnis, mit NaNs Füllen der Zeitbereich zwischen 0-10am und 4-11pm wo es keine Daten gibt:

date_range2 = pd.date_range(dt(2017,1,16,0), dt(2017,1,16, 23), freq='2H') 
df.reindex(date_range2) 

enter image description here

Allerdings, wenn ich bin odify die Zeitzone von df zuerst, dann die gleiche reindex Betrieb Ausbeute tun vollständig ein Datenrahmen gefüllt mit NaNs Werte:

df = df.tz_localize("Europe/Helsinki").tz_convert('UTC') 
df.reindex(date_range2) 

enter image description here

Jeder hat eine Vorstellung davon, was hier geschieht?

+0

das sieht aus wie ein Bug zu mir, der neue Index ist Zeitzone bewusst, aber es ist utc so sollte es in der Lage sein, jede Datetime Indizierung zu handhaben, würde ich einen Fehler auf [github] (https://github.com/pandas-dev/pandas/issues) – EdChum

+0

nicht einen Fehler veröffentlichen; UTC ist nicht das Gleiche wie naiv. – Jeff

Antwort

2

Fix:

Eine Abhilfe von Zeitzone-aware (tz) DateTimeIndex von der Zeitzone UTC-Zeit nach der Konvertierung tz_convert(None) mit so in ihnen, dass die Differenz (hier wäre, um loszuwerden, UTC+02:00) wird zu den resultierenden Zeitstempeln hinzugefügt.

Dann würden diese ordnungsgemäß neu indizieren.

np.random.seed(42) 
df1 = df.tz_localize("Europe/Helsinki").tz_convert('UTC').tz_localize(None) 
df1.reindex(date_range2) 

enter image description here


richtigen Ansatz:

standardmäßig das tz Schlüsselwort-Argument in pd.date_range ist None und nicht "UTC". Wir müssen dies entsprechend ändern, wie unter der Neuindizierung durch ihre UTC-Zeitstempel zu vergleichen passiert:

date_range2.tz = 'UTC' 
df1 = df.tz_localize("Europe/Helsinki").tz_convert('UTC') 
df1.reindex(date_range2) 

enter image description here

Verwandte Themen