2013-02-18 40 views
33

Po prostu próbuję uzyskać dostęp do nazwanych kolumn pandy przez liczbę całkowitą.Wybieranie kolumny pandy według lokalizacji

Możesz wybrać wiersz według lokalizacji, używając df.ix[3].

Ale jak wybrać kolumnę przez liczbę całkowitą?

Moja dataframe:

df=pandas.DataFrame({'a':np.random.rand(5), 'b':np.random.rand(5)}) 
+0

Updated zadać pytanie. –

Odpowiedz

57

dwa podejścia, które przychodzą na myśl:

>>> 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.ix[:, 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 
+4

FYI df.ix jest teraz zastępowany przez df.iloc –

25

Można również użyć df.icol(n) dostęp do kolumny przez liczbę całkowitą.

Aktualizacja: icol jest przestarzała i samą funkcjonalność można osiągnąć poprzez:

df.iloc[:, n] # to access the column at the nth position 
+2

. Zauważ, że w nadchodzącej wersji 0.11.0 metody te są nieaktualne i mogą zostać usunięte w przyszłych wersjach. Zobacz http://pandas.pydata.org/pandas-docs/dev/indexing.html#indexing-integer na temat wyboru pozycji za pomocą iloc/iat. –

+1

Powyższy link jest przestarzały, ponieważ dokumenty indeksujące zostały od tego czasu zrestrukturyzowane: http://pandas.pydata.org/pandas-docs/stable/indexing.html#selection-by-position. Na dzień dzisiejszy, w której najnowsza wersja to 0.21.0, "iloc" pozostaje udokumentowanym podejściem do dostępu do kolumny według pozycji. –

1

metody .transpose() konwertuje kolumn do rzędami do kolumny, a więc można nawet napisać

df.transpose().ix[3] 
+0

Transpozycja może zepsuć typy danych. – IanS

3

Można użyć etykiety opartej na .loc lub indeksie opartym na metodzie .iloc do podziału kolumn, w tym zakresy kolumn:

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 
0

Dostęp do wielu kolumn można uzyskać, przekazując listę indeksów kolumn do pliku dataFrame.ix.

Na przykład:

>>> 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 
Powiązane problemy