Ich habe eine list
von Daten, die von MongoDB gelesen wurde. Eine Teilmenge der Daten kann in this gist gefunden werden. Ich erstelle einen Datenrahmen aus dieser Liste und verwende die Datumsfelder, um einen DatetimeIndex zu erstellen. Die Daten wurden ursprünglich in meiner lokalen Zeitzone aufgezeichnet, aber in Mongo sind keine Zeitzoneninformationen beigefügt, daher korrigiere ich die DST wie empfohlen here.Pandas DatetimeIndex NonExistentTimeError nur beim Erstellen von MultiIndex
from datetime import datetime
from dateutil import tz
# data is the list from the gist
dates = [x['Date'] for x in data]
idx = pd.DatetimeIndex(dates, freq='D')
idx = idx.tz_localize(tz=tz.tzutc())
idx = idx.tz_convert(tz='Europe/Dublin')
idx = idx.normalize()
frame = DataFrame(data, index=idx)
frame = frame.drop('Date', 1)
alles scheint gut zu funktionieren, und mein Rahmen sieht wie folgt aus
Events ID
2008-03-31 00:00:00+01:00 0.0 116927302
2008-03-30 00:00:00+00:00 2401.0 116927302
2008-03-31 00:00:00+01:00 0.0 116927307
2008-03-30 00:00:00+00:00 0.0 116927307
2008-03-31 00:00:00+01:00 0.0 121126919
2008-03-30 00:00:00+00:00 1019.0 121126919
2008-03-30 00:00:00+00:00 0.0 121126922
2008-03-31 00:00:00+01:00 0.0 121126922
2008-03-30 00:00:00+00:00 0.0 121127133
2008-03-31 00:00:00+01:00 0.0 121127133
2008-03-31 00:00:00+01:00 0.0 131677370
2008-03-30 00:00:00+00:00 0.0 131677370
2008-03-30 00:00:00+00:00 0.0 131677416
2008-03-31 00:00:00+01:00 0.0 131677416
Jetzt möchte ich sowohl die ursprüngliche DatetimeIndex und die ID-Spalte verwenden, eine MultiIndex zu erstellen, wie here gezeigt. Wenn ich das versuchen, aber ich erhalte eine Fehlermeldung, die nicht angehoben wurde, als ursprünglich DatetimeIndex
frame.set_index([frame.ID, idx])
NonExistentTimeError: 2008-03-30 01:00:00
Schaffung Wenn ich frame.set_index(idx)
nur ohne den Multiindex, wirft es keinen Fehler
Versionen
- Python 2.7.11
- Pandas 0.18.0
Das ist super danke. Wie kommt es, dass der 'sort_index' notwendig ist? –
Hmmm, ich denke viele Funktionen in Pandas brauchen es. Du kannst [docs] (http://pandas.pydata.org/pandas-docs/stable/timeseries.html#datetimeindex) überprüfen - 'Während Pandas dich nicht zwingen, einen sortierten Datumsindex zu haben, haben einige dieser Methoden vielleicht unerwartetes oder falsches Verhalten, wenn die Daten unsortiert sind. Also bitte seien Sie vorsichtig. – jezrael
Das ist interessant, danke für die tolle Antwort und den einsichtsvollen Kommentar (ganz zu schweigen von der Geschwindigkeit der Antwort!) –