LOC vs ILOC u Pand: różnica między LOC a ILOC u Pand
Opublikowany: 2020-08-01Spis treści
Loc i iloc w Pandas
Częstą przyczyną nieporozumień wśród nowych programistów Pythona jest loc vs. iloc. Obaj wydają się bardzo do siebie podobni i wykonują podobne zadania. Więc to może zdziwić każdego ucznia.
Jeśli chcesz poznać różnicę między iloc a loc, dobrze trafiłeś, ponieważ w tym artykule szczegółowo omówimy ten temat. Dowiesz się, jaka jest kluczowa różnica między tymi funkcjami, a następnie zobaczysz je w działaniu, aby lepiej zrozumieć koncepcję. Sprawdź nasze kursy nauki o danych, aby dowiedzieć się więcej o Pandach.
Zacznijmy.
Różnica między loc a iloc
1. iloc w Pythonie
Możesz użyć iloc w Pythonie do wyboru. Jest oparty na lokalizacji całkowitej i pomaga wybrać według pozycji. Tak więc, jeśli chcesz znaleźć wiersz z indeksem 5, iloc pokaże ci piąty wiersz ramki danych, niezależnie od jego nazwy lub etykiety.
Oto przykład iloc w Pythonie:
>>> mydict = [{'a': 1, 'b': 2, 'c': 3, 'd': 4},
… {'a': 100, 'b': 200, 'c': 300, 'd': 400},
… {'a': 1000, 'b': 2000, 'c': 3000, 'd': 4000 }]
>>> df = pd.DataFrame(mydict)
>>> df
abcd
0 1 2 3 4
1 100 200 300 400
2 1000 2000 3000 4000
Zaindeksujemy wiersze skalarną liczbą całkowitą, używając funkcji iloc dla powyższej ramki danych:
>>> typ(df.iloc[0])
<class 'pandas.core.series.Series'>
>>> df.iloc[0]
1
b 2
c 3
d 4
Nazwa: 0, dtype: int64
2. zlokalizuj w Pandach
Możesz użyć loc w Pandach, aby uzyskać dostęp do wielu wierszy i kolumn za pomocą etykiet; jednak można go również użyć z tablicą logiczną.
Jeśli użyjesz loc do znalezienia wiersza z indeksem 5, nie otrzymasz z nim piątego wiersza. Zamiast tego otrzymasz tylko wiersz o nazwie „5”.
Oto przykład loc w Pandach:
>>> df = pd.DataFrame([[1, 2], [4, 5], [7, 8]],
… index=['kobra', 'żmija', 'sidewinder'],
… kolumny=['max_speed', 'shield'])
>>> df
tarcza max_speed
kobra 1 2
żmija 4 5
nawijarka 7 8
Powyżej była tabela, z której wyodrębnimy wiersz:
>>> df.loc['żmija']
max_prędkość 4
tarcza 5
Nazwa: viper, dtype: int64
Szczegółowy przykład dla loc vs iloc
Mimo że używamy obu tych funkcji do selekcji, najlepiej byłoby omówić szczegółowy przykład, aby zrozumieć ich różnice.
W naszym przykładzie użyjemy zestawu danych klienta telekomunikacyjnego, który jest dostępny na kaggle. Dodamy go do ramki danych:
df = pd.read_csv("Projekty/przewidywanie_odpływu/odpływ-klient-tele.csv")
df.głowa ()
ID | Płeć | s.obywatel | Partner | Ludzie | tenuta | Telefon | Wiele linii | Internet | Bezpieczeństwo | |
0 | 7590-VHVEG | Płeć żeńska | 0 | TAk | Nie | 1 | Nie | Brak telefonu | DSL | Nie |
1 | 5575-GNVDE | Męski | 0 | Nie | Nie | 34 | TAk | Nie | DSL | TAk |
2 | 3668-QPYBK | Męski | 0 | Nie | Nie | 2 | TAk | Nie | DSL | TAk |
Ten zbiór danych ma 21 kolumn; pokazaliśmy tylko kilka w celach demonstracyjnych. Jak już wspomnieliśmy, używamy loc do wybierania danych po etykiecie. Tutaj nazwy kolumn są ich etykietami, takimi jak płeć, staż, OnlineSecurity; wszystkie są nazwami kolumn, a także etykietami.
Ponieważ nie przypisaliśmy żadnego konkretnego indeksu, pandy domyślnie utworzyłyby indeks całkowity dla wierszy. Etykiety wierszy są liczbami całkowitymi, które zaczynają się od 0 i idą w górę. W tym przykładzie zobaczymy, jak loc i iloc zachowują się inaczej.
- Wybierz wiersz „1” i kolumnę „Partner”
df.loc[1, 'Partner']
Wyjście: „Nie”
Pokazuje wartość obecną w kolumnie „Partner” wiersza „1”.
- Wybierz etykiety wierszy „4” i kolumny „identyfikator klienta” i „płeć”
df.loc[:4, ['identyfikator klienta', 'płeć']]
Identyfikator klienta | Płeć | |
0 | 7590-VHVEG | Płeć żeńska |
1 | 5575-GNVDE | Męski |
2 | 3668-QPYBK | Męski |
3 | 7795-CFOCW | Męski |
4 | 9237-HQITU | Płeć żeńska |
- Wybierz etykiety wierszy „1”, „2”, „3” i kolumnę „Zależni”
df.loc[[1,2,3], 'Zależni']
1 Nie
2 Nie
3 Nie
Nazwa: Zależni, dtype: obiekt
Tym razem przefiltrujemy ramkę danych i zastosujemy iloc lub loc:
- Wybierz etykiety wierszy do kolumn „10” i „Usługa Telefoniczna” i „Usługa Internetowa” klienta, który ma Partnera (Partner powinien być „tak”)
df [df.Partner == 'Tak'].loc:10, ['Usługa Telefoniczna', 'Usługa Internetowa']]
W powyższym przypadku zastosowaliśmy filtr do bazy danych, ale nie zmieniliśmy indeksu, więc nasze dane wyjściowe pominęły wiele etykiet wierszy, których wymagał nasz filtr. Tak więc, używając tutaj loc[:10], wybraliśmy wiersze, które miały etykiety do „10”.
Z drugiej strony, jeśli użyjemy tutaj iloc i zastosujemy filtr, otrzymamy 10 wierszy, gdy iloc wybiera według pozycji, niezależnie od etykiet. Oto wynik, który otrzymamy, jeśli zastosujemy iloc[:10]:

df[df.Partner == 'Tak'].iloc[:10, [6,8]]
Usługa telefoniczna | Serwis internetowy | |
0 | Nie | DSL |
8 | TAk | Światłowód |
10 | TAk | DSL |
12 | TAk | Światłowód |
15 | TAk | Światłowód |
18 | TAk | DSL |
21 | TAk | Nie |
23 | TAk | DSL |
24 | TAk | DSL |
26 | TAk | Światłowód |
Na pewno zauważyłeś, że musimy zmienić naszą metodę wyboru kolumn.
Przeczytaj: samouczek Python Pandas
- Wybierz pierwsze 5 kolumn i pierwsze 5 wierszy za pomocą iloc
df.iloc[:4, :4]
Identyfikator klienta | Płeć | Emeryt | Partner | |
0 | 7590-VHVEG | Płeć żeńska | 0 | TAk |
1 | 5575-GNVDE | Męski | 0 | Nie |
2 | 3668-QPYBK | Męski | 0 | Nie |
3 | 7795-CFOCW | Męski | 0 | Nie |
Możemy użyć iloc do wybrania pozycji od końca. W tym celu po prostu użyjemy ujemnych liczb całkowitych (-1, -2 itd.) i zaczniemy od nich.
- Wybierz ostatnie 5 kolumn i ostatnie 5 wierszy
df.iloc[-5:, -5:]
Rozliczenia bez papieru | Metoda płatności | Opłaty miesięczne | Całkowite opłaty | Maselnica | |
7038 | TAk | Czek wysłany pocztą | 84,80 | 1990,5 | Nie |
7039 | TAk | Karta kredytowa | 103,20 | 7362.9 | Nie |
7040 | TAk | Czek elektroniczny | 29,60 | 346,45 | Nie |
7041 | TAk | Wysłany czek | 74,40 | 306,6 | TAk |
7042 | TAk | Przelew bankowy | 105,65 | 6844,5 | Nie |
Możesz również użyć funkcji lambda z iloc. (Funkcja lambda to mała anonimowa funkcja w Pythonie, która może mieć jedno wyrażenie, ale dowolną liczbę argumentów)
- Wybierz co trzeci wiersz aż do 15 i pokaż tylko kolumny „usługa internetowa” i „Partner”
df.iloc[ lambda x: (x.index x 3 == 0) & (x.index <= 150]['Partner', 'Usługa Internetowa' ]]
Partner | Serwis internetowy | |
0 | TAk | DSL |
3 | Nie | DSL |
6 | Nie | Światłowód |
9 | Nie | DSL |
12 | TAk | Światłowód |
15 | TAk | Światłowód |
Możemy również wybrać etykiety lub pozycje obecne pomiędzy.
- Wybierz pozycje kolumn od 4 do 6, a pozycje wierszy od 20 do 25
df.iloc[20:25, 4:6]
Ludzie | tenuta | |
20 | Nie | 1 |
21 | Nie | 12 |
22 | Nie | 1 |
23 | Nie | 58 |
24 | Nie | 49 |
Teraz, jeśli spróbujesz przekazać etykiety do iloc, Pandas wyświetli następujący komunikat o błędzie:
ValueError: indeksowanie oparte na lokalizacji może mieć tylko typy [liczba całkowita, wycinek całkowity (punkt START jest WŁĄCZONY, punkt końcowy jest WYŁĄCZONY), listy podobne do liczb całkowitych, tablica logiczna]
Podobny błąd otrzymasz, jeśli przekażesz pozycje do loc.
Przeczytaj także: Pytania do wywiadu z Pandami
Dowiedz się więcej o Pythonie
Uczeń musi zadawać pytania i znajdować na nie odpowiedzi. Mamy nadzieję, że ten artykuł odpowiedziałby na Twoje pytania dotyczące loc w Pandas (lub iloc w Pythonie). Najlepiej byłoby, gdybyś sam wypróbował te funkcje na różnych zestawach danych, aby zrozumieć, jak działają.
Jeśli chcesz dowiedzieć się więcej o Pythonie, Pandach i odpowiednich tematach, odwiedź nasz blog. Nasi eksperci dodają tam wiele szczegółowych zasobów.
Jeśli jesteś zainteresowany nauką o danych, sprawdź program IIIT-B i upGrad Executive PG w dziedzinie Data Science, który jest stworzony dla pracujących profesjonalistów i oferuje ponad 10 studiów przypadków i projektów, praktyczne warsztaty praktyczne, mentoring z ekspertami z branży, 1 -on-1 z mentorami branżowymi, ponad 400 godzin nauki i pomocy w pracy z najlepszymi firmami.
Jak możemy dodać wiersze Pandas DataFrame?
Aby wstawić wiersze w DataFrame, możemy użyć poleceń loc, iloc i ix.
1. Lokacja jest najczęściej używana dla etykiet naszego indeksu. Można to rozumieć tak, jak wstawiamy w loc 4, co oznacza, że szukamy wpisów DataFrame o indeksie 4.
2. Iloc jest najczęściej używany do wyszukiwania lokalizacji w indeksie. To tak, jakbyśmy wstawili w iloc 4, co oznacza, że szukamy wpisów DataFrame, które są obecne w indeksie 4.
3. Sprawa ix jest skomplikowana, ponieważ przekazujemy etykietę do ix, jeśli indeks jest oparty na liczbach całkowitych. IX 4 oznacza, że przeszukujemy DataFrame w poszukiwaniu wartości o indeksie 4.
Czym jest reindeksowanie w kontekście Pand w Pythonie?
Etykiety wierszy i kolumn elementu DataFrame ulegają zmianie, gdy ponownie je indeksujemy. Termin „ponowna indeksacja” odnosi się do procesu dopasowywania danych do określonego zestawu etykiet wzdłuż jednej osi. W Pandas ponowne indeksowanie może służyć do zmiany indeksu wierszy i kolumn elementu DataFrame. Wiele struktur danych indeksowych powiązanych z wieloma seriami pand lub DataFrame pand może być wykorzystanych z indeksami.
Jakie są operacje na danych w Pandas?
Istnieje kilka ważnych operacji na danych dla DataFrame w Pandas, które są następujące:
1. Wybór wierszy i kolumn - Przekazując nazwy wierszy i kolumn możemy wybrać dowolny wiersz i kolumnę w DataFrame. Staje się jednowymiarowy i jest traktowany jako seria, gdy wybierasz go z DataFrame.
2. Filtrowanie danych - Używając niektórych wyrażeń logicznych w DataFrame, możemy filtrować dane.
3. Wartości Null — Gdy do pozycji nie są podane żadne dane, otrzymują one wartość Null. W różnych kolumnach, które są zwykle przedstawiane jako NaN, nie może być żadnych wartości.