Dies ist eine sehr einfache und praktische Frage. Ich habe das Gefühl, dass es ein dummes Detail sein muss und dass es ähnliche Fragen geben sollte. Ich konnte sie nicht finden. Wenn jemand es tut, werde ich das gerne löschen.
Am nächsten fand ich diese: Pandas: Iterieren über den DataFrame-Index mit loc
Wie auch immer, die Sache ist, ich habe einen Datetime indizierten Panda-Datenrahmen wie folgt:
%Vor%Seltsamerweise kann ich mit keiner der folgenden Methoden auf seine Werte zugreifen:
%Vor% Ich bekomme den KeyError
Fehler.
Noch seltsamer ist, dass die folgenden Methoden funktionieren:
%Vor%Ich bin ziemlich neu bei Pandas, vielleicht verpasse ich hier etwas?
pandas nimmt was in []
ist und entscheidet was es tun soll. Wenn es sich um eine Untergruppe von Spaltennamen handelt, wird ein DataFrame mit diesen Spalten zurückgegeben. Wenn es sich um einen Bereich von Indexwerten handelt, wird eine Teilmenge dieser Zeilen zurückgegeben. Was nicht behandelt, ist ein einzelner Indexwert.
Zwei Workarounds
1.Drehen Sie das Argument in etwas, das Pandas als Bereich interpretiert.
%Vor% 2.Verwenden Sie die Methode, mit der Sie dieses Ergebnis erhalten. loc[]
Sie können to_pydatetime verwenden Funktion auf Ihrem Index also so:
%Vor%Wenn Sie Ihren Datenrahmen umkehren, funktioniert die Indexierung:
Hier ist Ihre .csv Datendatei:
%Vor%Verwenden Sie die folgende Beschwörungsformel, um sie in einen Datenrahmen einzulesen:
%Vor%Versuchen Sie dann, eine Zeile zu indizieren:
%Vor%Sie haben am Ende eine Traceback mit KeyError
Wenn Sie es jedoch umgekehrt, wie folgt:
%Vor%Dann versuchen Sie den gleichen Index, Sie erhalten das richtige Ergebnis:
%Vor%Ich weiß NICHT warum das der Fall ist. Chancen sind, es hat etwas damit zu tun, eine Zeitreihe in eine Richtung zu sein, aber nicht die andere? Jemand, der besser informiert ist, sollte das beantworten.
Update: Durch RTFM habe ich diese Seite entdeckt:
Wenn Sie den Abschnitt "Slice vs. Exakte Übereinstimmung" finden, gibt es eine Warnung Das erklärt dieses Verhalten. Das Problem scheint zu sein, dass für eine TimeSeries eine exakte Übereinstimmung als Spaltenname interpretiert wird. Bei unsortierten Datenframes passiert dies nicht. Siehe das Warnfeld in dem Abschnitt, auf den oben verwiesen wird. Ich finde das immer noch schrecklich verwirrend, aber da gehts los ...
Bearbeiten: Änderte den Ausdruck von b, der im Original falsch war.
Edit1: Update mit Erklärung in Python-Dokumentation.