Moim zdaniem zaakceptowana odpowiedź jest myląca, ponieważ używa DataFrame tylko z brakującymi wartościami. Nie podoba mi się również określenie oparte na pozycji .iloci zamiast tego wolę lokalizację całkowitą, ponieważ jest ona bardziej opisowa i dokładnie to, co .ilocoznacza. Kluczowym słowem jest INTEGER - .ilocwymaga INTEGERS.
Zobacz moją bardzo szczegółową serię blogów na temat wyboru podzbiorów, aby uzyskać więcej
.ix jest przestarzałe i niejednoznaczne i nigdy nie należy go używać
Ponieważ .ixjest przestarzałe, skupimy się tylko na różnicach między .loci .iloc.
Zanim omówimy różnice, ważne jest, aby zrozumieć, że DataFrames mają etykiety, które pomagają zidentyfikować każdą kolumnę i każdy indeks. Rzućmy okiem na przykładową ramkę DataFrame:
df = pd.DataFrame({'age':[30, 2, 12, 4, 32, 33, 69],
'color':['blue', 'green', 'red', 'white', 'gray', 'black', 'red'],
'food':['Steak', 'Lamb', 'Mango', 'Apple', 'Cheese', 'Melon', 'Beans'],
'height':[165, 70, 120, 80, 180, 172, 150],
'score':[4.6, 8.3, 9.0, 3.3, 1.8, 9.5, 2.2],
'state':['NY', 'TX', 'FL', 'AL', 'AK', 'TX', 'TX']
},
index=['Jane', 'Nick', 'Aaron', 'Penelope', 'Dean', 'Christina', 'Cornelia'])

Wszystkie pogrubione słowa są etykietami. Etykiety, age, color, food, height, scorei statesą wykorzystywane do kolumn . Pozostałe etykiety, Jane, Nick, Aaron, Penelope, Dean, Christina, Corneliasłużą do indeksu .
Podstawowymi sposobami wyboru poszczególnych wierszy w ramce danych są narzędzia indeksujące .loci .iloc. Każdy z tych indeksatorów może być również używany do jednoczesnego wybierania kolumn, ale na razie łatwiej jest skupić się na wierszach. Ponadto każdy z indeksatorów używa zestawu nawiasów, które bezpośrednio po nazwie dokonują wyboru.
.loc wybiera dane tylko według etykiet
Najpierw porozmawiamy o .locindeksatorze, który wybiera dane tylko według etykiet indeksu lub kolumn. W naszym przykładowym DataFrame podaliśmy znaczące nazwy jako wartości dla indeksu. Wiele DataFrames nie będzie miało żadnych znaczących nazw i zamiast tego będzie domyślnie tylko liczbami całkowitymi od 0 do n-1, gdzie n jest długością DataFrame.
Istnieją trzy różne dane wejściowe, których możesz użyć .loc
- Sznurek
- Lista ciągów
- Wycinanie notacji za pomocą łańcuchów jako wartości początkowej i końcowej
Wybór pojedynczego wiersza z .loc z ciągiem znaków
Aby wybrać pojedynczy wiersz danych, umieść etykietę indeksu wewnątrz następujących nawiasów .loc.
df.loc['Penelope']
Zwraca to wiersz danych jako Serię
age 4
color white
food Apple
height 80
score 3.3
state AL
Name: Penelope, dtype: object
Zaznaczanie wielu wierszy za pomocą .loc z listą ciągów
df.loc[['Cornelia', 'Jane', 'Dean']]
Zwraca DataFrame z wierszami w kolejności określonej na liście:

Zaznaczanie wielu wierszy za pomocą .loc z zapisem wycinka
Notacja wycinka jest zdefiniowana przez wartości początkową, zatrzymaną i krokową. Podczas krojenia według etykiety pandy uwzględniają wartość stop na zwrocie. Następujące plastry od Aarona do Deana włącznie. Wielkość kroku nie jest wyraźnie zdefiniowana, ale domyślnie wynosi 1.
df.loc['Aaron':'Dean']

Złożone plastry można pobierać w taki sam sposób, jak listy w języku Python.
.iloc wybiera dane tylko według lokalizacji całkowitej
Przejdźmy teraz do .iloc. Każdy wiersz i kolumna danych w DataFrame ma liczbę całkowitą, która ją definiuje. Jest to dodatek do etykiety wyświetlanej na wydruku . Lokalizacją całkowitą jest po prostu liczba wierszy / kolumn od góry / po lewej, zaczynająca się od 0.
Istnieją trzy różne dane wejściowe, których możesz użyć .iloc
- Liczba całkowita
- Lista liczb całkowitych
- Odcięcie notacji za pomocą liczb całkowitych jako wartości początkowej i końcowej
Wybór pojedynczego wiersza z .iloc z liczbą całkowitą
df.iloc[4]
Zwraca piąty wiersz (liczba całkowita 4) jako szereg
age 32
color gray
food Cheese
height 180
score 1.8
state AK
Name: Dean, dtype: object
Zaznaczanie wielu wierszy za pomocą .iloc z listą liczb całkowitych
df.iloc[[2, -2]]
Zwraca DataFrame trzeciego i drugiego do ostatniego wiersza:

Zaznaczanie wielu wierszy za pomocą .iloc z zapisem plastra
df.iloc[:5:3]

Jednoczesny wybór wierszy i kolumn za pomocą .loc i .iloc
Jedną z doskonałych zdolności obu .loc/.ilocjest możliwość jednoczesnego wyboru zarówno wierszy, jak i kolumn. W powyższych przykładach wszystkie kolumny zostały zwrócone z każdego wyboru. Możemy wybrać kolumny z tymi samymi typami danych wejściowych, co w przypadku wierszy. Po prostu musimy oddzielić zaznaczenie wiersza i kolumny przecinkiem .
Na przykład możemy wybrać wiersze Jane i Dean za pomocą wysokości kolumn, wyniku i stanu w następujący sposób:
df.loc[['Jane', 'Dean'], 'height':]

Używa to listy etykiet dla wierszy i notacji plastra dla kolumn
Możemy naturalnie wykonywać podobne operacje, .ilocużywając tylko liczb całkowitych.
df.iloc[[1,4], 2]
Nick Lamb
Dean Cheese
Name: food, dtype: object
Jednoczesny wybór z etykietami i lokalizacją całkowitą
.ixbył używany do dokonywania wyborów jednocześnie z etykietami i lokalizacją liczb całkowitych, co było użyteczne, ale czasami mylące i dwuznaczne, i na szczęście zostało wycofane. W przypadku, gdy musisz dokonać wyboru za pomocą kombinacji etykiet i lokalizacji liczb całkowitych, musisz dokonać zarówno etykiet wyboru, jak i lokalizacji liczb całkowitych.
Na przykład, jeśli chcemy wybrać wiersze Nicki Corneliawraz z kolumnami 2 i 4, moglibyśmy skorzystać .locz konwersji liczb całkowitych na etykiety z następującymi:
col_names = df.columns[[2, 4]]
df.loc[['Nick', 'Cornelia'], col_names]
Lub alternatywnie przekonwertuj etykiety indeksu na liczby całkowite za pomocą get_locmetody index.
labels = ['Nick', 'Cornelia']
index_ints = [df.index.get_loc(label) for label in labels]
df.iloc[index_ints, [2, 4]]
Wybór boolowski
Indeksator .loc może także dokonywać wyboru wartości logicznej. Na przykład, jeśli chcemy znaleźć wszystkie wiersze, w których wiek jest wyższy niż 30 i zwrócić tylko kolumny foodi score, możemy wykonać następujące czynności:
df.loc[df['age'] > 30, ['food', 'score']]
Możesz to powtórzyć, .ilocale nie możesz przekazać mu serii boolowskiej. Musisz przekonwertować wartość logiczną na tablicę liczb liczbowych, taką jak ta:
df.iloc[(df['age'] > 30).values, [2, 4]]
Zaznaczanie wszystkich wierszy
Można użyć .loc/.iloctylko do wyboru kolumny. Możesz zaznaczyć wszystkie wiersze za pomocą dwukropka takiego jak ten:
df.loc[:, 'color':'score':2]

Operator indeksowania []może również wybierać wiersze i kolumny, ale nie jednocześnie.
Większość ludzi zna podstawowy cel operatora indeksowania DataFrame, którym jest wybieranie kolumn. Ciąg wybiera pojedynczą kolumnę jako Serię, a lista ciągów wybiera wiele kolumn jako ramkę danych.
df['food']
Jane Steak
Nick Lamb
Aaron Mango
Penelope Apple
Dean Cheese
Christina Melon
Cornelia Beans
Name: food, dtype: object
Korzystanie z listy wybiera wiele kolumn
df[['food', 'score']]

Ludzie mniej znają to, że przy stosowaniu notacji plastra wybór odbywa się na podstawie etykiet wierszy lub według lokalizacji liczb całkowitych. Jest to bardzo mylące i coś, czego prawie nigdy nie używam, ale działa.
df['Penelope':'Christina'] # slice rows by label

df[2:6:2] # slice rows by integer location

Jednoznaczność z .loc/.ilocwysoce korzystne dla wierszy zaznaczania. Sam operator indeksowania nie jest w stanie jednocześnie zaznaczyć wierszy i kolumn.
df[3:5, 'color']
TypeError: unhashable type: 'slice'