LOC vs ILOC u Pand: różnica między LOC a ILOC u Pand

Opublikowany: 2020-08-01

Spis 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.