[FIXED] Behalten Sie die ausgewählte Spalte als DataFrame statt Series bei

Ausgabe

Wenn Sie eine einzelne Spalte aus einem Pandas-Datenrahmen (z. B. df.iloc[:, 0], df['A'], oder df.A, usw.) auswählen, wird der resultierende Vektor automatisch in eine Serie anstelle eines einspaltigen Datenrahmens konvertiert. Ich schreibe jedoch einige Funktionen, die einen DataFrame als Eingabeargument verwenden. Daher bevorzuge ich den Umgang mit einspaltigem DataFrame anstelle von Series, damit die Funktion davon ausgehen kann, dass auf df.columns zugegriffen werden kann. Im Moment muss ich die Serie explizit in einen DataFrame konvertieren, indem ich so etwas wie pd.DataFrame(df.iloc[:, 0]). Dies scheint nicht die sauberste Methode zu sein. Gibt es eine elegantere Möglichkeit, direkt aus einem DataFrame zu indizieren, sodass das Ergebnis ein einspaltiger DataFrame anstelle von Series ist?

Lösung

Wie @Jeff erwähnt, gibt es einige Möglichkeiten, dies zu tun, aber ich empfehle die Verwendung von loc/iloc, um expliziter zu sein (und Fehler frühzeitig zu melden, wenn Sie etwas Mehrdeutiges versuchen):

In [10]: df = pd.DataFrame([[1, 2], [3, 4]], columns=['A', 'B'])

In [11]: df
Out[11]:
   A  B
0  1  2
1  3  4

In [12]: df[['A']]

In [13]: df[[0]]

In [14]: df.loc[:, ['A']]

In [15]: df.iloc[:, [0]]

Out[12-15]:  # they all return the same thing:
   A
0  1
1  3

Die letzten beiden Optionen beseitigen Mehrdeutigkeiten im Fall von ganzzahligen Spaltennamen (aus genau dem Grund wurden loc/iloc erstellt). Zum Beispiel:

In [16]: df = pd.DataFrame([[1, 2], [3, 4]], columns=['A', 0])

In [17]: df
Out[17]:
   A  0
0  1  2
1  3  4

In [18]: df[[0]]  # ambiguous
Out[18]:
   A
0  1
1  3


Beantwortet von –
Andy Hayden


Antwort geprüft von –
David Marino (FixError Volunteer)

0 Shares:
Leave a Reply

Your email address will not be published. Required fields are marked *

You May Also Like