Zugriff auf den DateFrame-Datetime-Index von pandas über Strings

8

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

So wählen Sie Zeilen innerhalb eines Pandas-Datenrahmens nur dann aus, wenn der Index Datum und Uhrzeit angibt

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?

    
Pedro Braz 26.04.2016, 16:56
quelle

3 Antworten

14

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.

Lösung

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[]

%Vor%

Link zur Dokumentation

    
piRSquared 26.04.2016, 17:15
quelle
2

Sie können to_pydatetime verwenden Funktion auf Ihrem Index also so:

%Vor%     
Scratch'N'Purr 26.04.2016 17:18
quelle
1

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.

    
bob_monsen 02.01.2018 00:35
quelle

Tags und Links