Pandas Spalte nach Ort auswählen

100

Ich versuche einfach, über eine Ganzzahl auf benannte Pandas-Spalten zuzugreifen.

Sie können eine Zeile nach Standort mit auswählen df.ix[3].

Aber wie wählt man eine Spalte nach Ganzzahl aus?

Mein Datenrahmen:

df=pandas.DataFrame({'a':np.random.rand(5), 'b':np.random.rand(5)})
Jason Strimpel
quelle
Aktualisiert, um eine Frage zu stellen.
Jason Strimpel
In diesem Beispiel ist die Reihenfolge der Spalten möglicherweise nicht definiert. ('a' kann die erste oder die zweite Spalte sein).
user48956

Antworten:

150

Zwei Ansätze, die mir in den Sinn kommen:

>>> df
          A         B         C         D
0  0.424634  1.716633  0.282734  2.086944
1 -1.325816  2.056277  2.583704 -0.776403
2  1.457809 -0.407279 -1.560583 -1.316246
3 -0.757134 -1.321025  1.325853 -2.513373
4  1.366180 -1.265185 -2.184617  0.881514
>>> df.iloc[:, 2]
0    0.282734
1    2.583704
2   -1.560583
3    1.325853
4   -2.184617
Name: C
>>> df[df.columns[2]]
0    0.282734
1    2.583704
2   -1.560583
3    1.325853
4   -2.184617
Name: C

Bearbeiten : Die ursprüngliche Antwort schlug die Verwendung von vor, df.ix[:,2]aber diese Funktion ist jetzt veraltet. Benutzer sollten zu wechseln df.iloc[:,2].

DSM
quelle
28
FYI df.ix wird jetzt durch df.iloc
yosemite_k
Beachten Sie, dass bei zwei Spalten mit demselben Namen die Methode df.iloc [:, 2] nur eine Spalte zurückgibt, die Methode df [df.columns [2]] jedoch beide Spalten mit demselben Namen zurückgibt.
BobbyG
54

Sie können auch df.icol(n)auf eine Spalte mit einer Ganzzahl zugreifen.

Update: icolist veraltet und die gleiche Funktionalität kann erreicht werden durch:

df.iloc[:, n]  # to access the column at the nth position
Adrian
quelle
2
Beachten Sie, dass diese Methoden für die kommende Version 0.11.0 veraltet sind und in zukünftigen Versionen möglicherweise entfernt werden. Unter pandas.pydata.org/pandas-docs/dev/… erfahren Sie, wie Sie mit iloc / iat nach Position auswählen.
Wouter Overmeire
1
Der obige Link ist veraltet, da die Indizierungsdokumente inzwischen umstrukturiert wurden: pandas.pydata.org/pandas-docs/stable/… . Bis heute, in der die neueste Version 0.21.0 ist, ilocbleibt der dokumentierte Ansatz für den Zugriff auf eine Spalte nach Position erhalten.
iff_or
21

Sie können label-based mit .loc oder index-based mit .iloc verwenden, um das Spalten-Slicing einschließlich der Spaltenbereiche durchzuführen:

In [50]: import pandas as pd

In [51]: import numpy as np

In [52]: df = pd.DataFrame(np.random.rand(4,4), columns = list('abcd'))

In [53]: df
Out[53]: 
          a         b         c         d
0  0.806811  0.187630  0.978159  0.317261
1  0.738792  0.862661  0.580592  0.010177
2  0.224633  0.342579  0.214512  0.375147
3  0.875262  0.151867  0.071244  0.893735

In [54]: df.loc[:, ["a", "b", "d"]] ### Selective columns based slicing
Out[54]: 
          a         b         d
0  0.806811  0.187630  0.317261
1  0.738792  0.862661  0.010177
2  0.224633  0.342579  0.375147
3  0.875262  0.151867  0.893735

In [55]: df.loc[:, "a":"c"] ### Selective label based column ranges slicing
Out[55]: 
          a         b         c
0  0.806811  0.187630  0.978159
1  0.738792  0.862661  0.580592
2  0.224633  0.342579  0.214512
3  0.875262  0.151867  0.071244

In [56]: df.iloc[:, 0:3] ### Selective index based column ranges slicing
Out[56]: 
          a         b         c
0  0.806811  0.187630  0.978159
1  0.738792  0.862661  0.580592
2  0.224633  0.342579  0.214512
3  0.875262  0.151867  0.071244
Surya
quelle
6

Sie können auf mehrere Spalten zugreifen, indem Sie eine Liste der Spaltenindizes an dataFrame.ix übergeben.

Beispielsweise:

>>> df = pandas.DataFrame({
             'a': np.random.rand(5),
             'b': np.random.rand(5),
             'c': np.random.rand(5),
             'd': np.random.rand(5)
         })

>>> df
          a         b         c         d
0  0.705718  0.414073  0.007040  0.889579
1  0.198005  0.520747  0.827818  0.366271
2  0.974552  0.667484  0.056246  0.524306
3  0.512126  0.775926  0.837896  0.955200
4  0.793203  0.686405  0.401596  0.544421

>>> df.ix[:,[1,3]]
          b         d
0  0.414073  0.889579
1  0.520747  0.366271
2  0.667484  0.524306
3  0.775926  0.955200
4  0.686405  0.544421
Safwan
quelle
1

Die Methode .transpose () konvertiert Spalten in Zeilen und Zeilen in Spalten, sodass Sie sogar schreiben können

df.transpose().ix[3]
Stefano Fedele
quelle
2
Durch das Transponieren können Datentypen durcheinander gebracht werden.
IanS