Wybierz wiersze Pandy na podstawie indeksu listy

106

Mam Dataframe df:

   20060930  10.103       NaN     10.103   7.981
   20061231  15.915       NaN     15.915  12.686
   20070331   3.196       NaN      3.196   2.710
   20070630   7.907       NaN      7.907   6.459

Następnie chcę wybrać wiersze z określonymi numerami sekwencji, które są wskazane na liście, załóżmy, że tutaj jest [1,3], a następnie po lewej:

   20061231  15.915       NaN     15.915  12.686
   20070630   7.907       NaN      7.907   6.459

Jak lub jaka funkcja może to zrobić?

user2806761
źródło

Odpowiedzi:

131
List = [1, 3]
df.ix[List]

powinien załatwić sprawę! Kiedy indeksuję z ramkami danych, zawsze używam metody .ix (). Jest o wiele łatwiejsze i bardziej elastyczne ...

UPDATE Nie jest to już akceptowana metoda indeksowania. ixSposób jest przestarzała. Służy .ilocdo indeksowania opartego na liczbach całkowitych i .locdo indeksowania na podstawie etykiet.

Woody Pride
źródło
14
To jest teraz przestarzałe, .iloc powinien być używany do indeksowania pozycyjnego
t_warsop
87

możesz również użyć iloc:

df.iloc[[1,3],:]

To nie zadziała, jeśli indeksy w twojej ramce danych nie odpowiadają kolejności wierszy z powodu wcześniejszych obliczeń. W takim przypadku użyj:

df.index.isin([1,3])

... jak sugerowano w innych odpowiedziach.

yemu
źródło
61

Innym sposobem (chociaż jest to dłuższy kod), ale jest szybszy niż powyższe kody. Sprawdź to za pomocą funkcji% timeit:

df[df.index.isin([1,3])]

PS: Znasz przyczynę

wprowadź opis obrazu tutaj

Amruth Lakkavaram
źródło
1
użyj df.index.get_level_values(0).isindla multiindex
CiaranWelsh
4

W przypadku dużych zestawów danych wydajne jest odczytywanie tylko wybranych wierszy za pomocą skiprowsparametru.

Przykład

pred = lambda x: x not in [1, 3]
pd.read_csv("data.csv", skiprows=pred, index_col=0, names=...)

Spowoduje to teraz zwrócenie DataFrame z pliku, który pomija wszystkie wiersze z wyjątkiem 1 i 3.


Detale

Z dokumentów :

skiprows : podobne do listy, liczby całkowite lub wywoływalne, domyślnie None

...

W przypadku wywoływania funkcja wywoływalna zostanie oszacowana na podstawie indeksów wierszy, zwracając wartość True, jeśli wiersz powinien zostać pominięty, lub False w przeciwnym razie. Przykładem prawidłowego wywoływalnego argumentu może byćlambda x: x in [0, 2]

Ta funkcja działa w wersji pandy 0.20.0+. Zobacz także odpowiedni problem i powiązany post .

pylang
źródło