Python Pandas - Indizieren und Auswählen von Daten

In diesem Kapitel werden wir diskutieren, wie man das Datum schneidet und würfelt und im Allgemeinen die Teilmenge des Pandas-Objekts erhält.

Die Python- und NumPy-Indexierungsoperatoren "[]" und der Attributoperator "." Bieten Sie schnellen und einfachen Zugriff auf Pandas-Datenstrukturen in einer Vielzahl von Anwendungsfällen. Da jedoch die Art der Daten, auf die zugegriffen werden soll, nicht im Voraus bekannt ist, hat die direkte Verwendung von Standardoperatoren einige Optimierungsgrenzen. Für den Produktionscode empfehlen wir, die in diesem Kapitel erläuterten optimierten Pandas-Datenzugriffsmethoden zu nutzen.

Pandas unterstützt jetzt drei Arten der Mehrachsen-Indizierung. Die drei Typen sind in der folgenden Tabelle aufgeführt -

Sr.Nr. Indizierung & Beschreibung
1

.loc()

Etikettenbasiert

2

.iloc()

Ganzzahl basiert

3

.ix()

Sowohl Label- als auch Integer-basiert

.loc ()

Pandas bieten verschiedene Methoden, um rein zu haben label based indexing. Beim Schneiden wird auch die Startgrenze berücksichtigt. Ganzzahlen sind gültige Beschriftungen, beziehen sich jedoch auf die Beschriftung und nicht auf die Position.

.loc() hat mehrere Zugriffsmethoden wie -

  • Ein einzelnes skalares Etikett
  • Eine Liste der Etiketten
  • Ein Slice-Objekt
  • Ein boolesches Array

locNimmt zwei Einzel- / Listen- / Bereichsoperatoren, die durch ',' getrennt sind. Die erste gibt die Zeile und die zweite die Spalten an.

Beispiel 1

#import the pandas library and aliasing as pd
import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randn(8, 4),
index = ['a','b','c','d','e','f','g','h'], columns = ['A', 'B', 'C', 'D'])

#select all rows for a specific column
print df.loc[:,'A']

Es ist output ist wie folgt -

a   0.391548
b  -0.070649
c  -0.317212
d  -2.162406
e   2.202797
f   0.613709
g   1.050559
h   1.122680
Name: A, dtype: float64

Beispiel 2

# import the pandas library and aliasing as pd
import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randn(8, 4),
index = ['a','b','c','d','e','f','g','h'], columns = ['A', 'B', 'C', 'D'])

# Select all rows for multiple columns, say list[]
print df.loc[:,['A','C']]

Es ist output ist wie folgt -

A           C
a    0.391548    0.745623
b   -0.070649    1.620406
c   -0.317212    1.448365
d   -2.162406   -0.873557
e    2.202797    0.528067
f    0.613709    0.286414
g    1.050559    0.216526
h    1.122680   -1.621420

Beispiel 3

# import the pandas library and aliasing as pd
import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randn(8, 4),
index = ['a','b','c','d','e','f','g','h'], columns = ['A', 'B', 'C', 'D'])

# Select few rows for multiple columns, say list[]
print df.loc[['a','b','f','h'],['A','C']]

Es ist output ist wie folgt -

A          C
a   0.391548   0.745623
b  -0.070649   1.620406
f   0.613709   0.286414
h   1.122680  -1.621420

Beispiel 4

# import the pandas library and aliasing as pd
import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randn(8, 4),
index = ['a','b','c','d','e','f','g','h'], columns = ['A', 'B', 'C', 'D'])

# Select range of rows for all columns
print df.loc['a':'h']

Es ist output ist wie folgt -

A           B          C          D
a    0.391548   -0.224297   0.745623   0.054301
b   -0.070649   -0.880130   1.620406   1.419743
c   -0.317212   -1.929698   1.448365   0.616899
d   -2.162406    0.614256  -0.873557   1.093958
e    2.202797   -2.315915   0.528067   0.612482
f    0.613709   -0.157674   0.286414  -0.500517
g    1.050559   -2.272099   0.216526   0.928449
h    1.122680    0.324368  -1.621420  -0.741470

Beispiel 5

# import the pandas library and aliasing as pd
import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randn(8, 4),
index = ['a','b','c','d','e','f','g','h'], columns = ['A', 'B', 'C', 'D'])

# for getting values with a boolean array
print df.loc['a']>0

Es ist output ist wie folgt -

A  False
B  True
C  False
D  False
Name: a, dtype: bool

.iloc ()

Pandas bieten verschiedene Methoden, um eine rein ganzzahlige Indizierung zu erhalten. Wie Python und Numpy sind dies0-based Indizierung.

Die verschiedenen Zugriffsmethoden sind wie folgt:

  • Eine ganze Zahl
  • Eine Liste von ganzen Zahlen
  • Ein Wertebereich

Beispiel 1

# import the pandas library and aliasing as pd
import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randn(8, 4), columns = ['A', 'B', 'C', 'D'])

# select all rows for a specific column
print df.iloc[:4]

Es ist output ist wie folgt -

A          B           C           D
0   0.699435   0.256239   -1.270702   -0.645195
1  -0.685354   0.890791   -0.813012    0.631615
2  -0.783192  -0.531378    0.025070    0.230806
3   0.539042  -1.284314    0.826977   -0.026251

Beispiel 2

import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randn(8, 4), columns = ['A', 'B', 'C', 'D'])

# Integer slicing
print df.iloc[:4]
print df.iloc[1:5, 2:4]

Es ist output ist wie folgt -

A          B           C           D
0   0.699435   0.256239   -1.270702   -0.645195
1  -0.685354   0.890791   -0.813012    0.631615
2  -0.783192  -0.531378    0.025070    0.230806
3   0.539042  -1.284314    0.826977   -0.026251

           C          D
1  -0.813012   0.631615
2   0.025070   0.230806
3   0.826977  -0.026251
4   1.423332   1.130568

Beispiel 3

import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randn(8, 4), columns = ['A', 'B', 'C', 'D'])

# Slicing through list of values
print df.iloc[[1, 3, 5], [1, 3]]
print df.iloc[1:3, :]
print df.iloc[:,1:3]

Es ist output ist wie folgt -

B           D
1   0.890791    0.631615
3  -1.284314   -0.026251
5  -0.512888   -0.518930

           A           B           C           D
1  -0.685354    0.890791   -0.813012    0.631615
2  -0.783192   -0.531378    0.025070    0.230806

           B           C
0   0.256239   -1.270702
1   0.890791   -0.813012
2  -0.531378    0.025070
3  -1.284314    0.826977
4  -0.460729    1.423332
5  -0.512888    0.581409
6  -1.204853    0.098060
7  -0.947857    0.641358

.ix ()

Neben reinen Label-basierten und Integer-basierten bietet Pandas eine Hybridmethode zum Auswählen und Untermengen des Objekts mit dem Operator .ix ().

Beispiel 1

import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randn(8, 4), columns = ['A', 'B', 'C', 'D'])

# Integer slicing
print df.ix[:4]

Es ist output ist wie folgt -

A          B           C           D
0   0.699435   0.256239   -1.270702   -0.645195
1  -0.685354   0.890791   -0.813012    0.631615
2  -0.783192  -0.531378    0.025070    0.230806
3   0.539042  -1.284314    0.826977   -0.026251

Beispiel 2

import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randn(8, 4), columns = ['A', 'B', 'C', 'D'])
# Index slicing
print df.ix[:,'A']

Es ist output ist wie folgt -

0   0.699435
1  -0.685354
2  -0.783192
3   0.539042
4  -1.044209
5  -1.415411
6   1.062095
7   0.994204
Name: A, dtype: float64

Verwendung von Notationen

Das Abrufen von Werten aus dem Pandas-Objekt mit der Mehrachsen-Indizierung verwendet die folgende Notation:

Objekt Indexer Rückgabetyp
Serie s.loc [Indexer] Skalarwert
DataFrame df.loc [row_index, col_index] Serienobjekt
Panel p.loc [item_index, major_index, minor_index] p.loc [item_index, major_index, minor_index]

Note − .iloc() & .ix() Wendet die gleichen Indizierungsoptionen und den gleichen Rückgabewert an.

Lassen Sie uns nun sehen, wie jede Operation für das DataFrame-Objekt ausgeführt werden kann. Wir werden den grundlegenden Indizierungsoperator '[]' verwenden -

Beispiel 1

import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randn(8, 4), columns = ['A', 'B', 'C', 'D'])
print df['A']

Es ist output ist wie folgt -

0  -0.478893
1   0.391931
2   0.336825
3  -1.055102
4  -0.165218
5  -0.328641
6   0.567721
7  -0.759399
Name: A, dtype: float64

Note - Wir können eine Liste von Werten an [] übergeben, um diese Spalten auszuwählen.

Beispiel 2

import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randn(8, 4), columns = ['A', 'B', 'C', 'D'])

print df[['A','B']]

Es ist output ist wie folgt -

A           B
0  -0.478893   -0.606311
1   0.391931   -0.949025
2   0.336825    0.093717
3  -1.055102   -0.012944
4  -0.165218    1.550310
5  -0.328641   -0.226363
6   0.567721   -0.312585
7  -0.759399   -0.372696

Beispiel 3

import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randn(8, 4), columns = ['A', 'B', 'C', 'D'])
print df[2:2]

Es ist output ist wie folgt -

Columns: [A, B, C, D]
Index: []

Attributzugriff

Spalten können mit dem Attributoperator '.' Ausgewählt werden.

Beispiel

import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randn(8, 4), columns = ['A', 'B', 'C', 'D'])

print df.A

Es ist output ist wie folgt -

0   -0.478893
1    0.391931
2    0.336825
3   -1.055102
4   -0.165218
5   -0.328641
6    0.567721
7   -0.759399
Name: A, dtype: float64