Einführung
In diesem Artikel werde ich verschiedene Bedingungsextraktionen mithilfe der Abfrage vorstellen, die eine der Funktionen von Pandas ist.
Nach meiner Erfahrung werde ich den eigentlichen Code anhand von 10 Beispielen schreiben, die häufig bei der Datenvorverarbeitung auftreten.
Ausführungsumgebung
- mac OS Mojave
- Python 3.7.3
!python -V
Python 3.7.3
Modul verwendet
Die Version von Pandas verwendet 1.0.3.
- Ein Fehler kann auftreten, wenn die Version Version 0.24.0 oder früher ist.
import pandas as pd #Diesmal die Hauptrolle
import numpy as np #Wird verwendet, um inf- und nan-Werte zu generieren
#Überprüfen Sie die Version von Pandas
print(pd.__version__)
1.0.3
Datenaufbereitung
#Vorbereitung des diesmal zu verwendenden Datenrahmens
df = pd.DataFrame({
'a': range(1, 6),
'b': range(10, 0, -2),
'c c' : [1, 3, 5, 7, 9],
'd' : [2, np.nan, np.inf, None, 10],
'e' : ['a', 'b', 'c', 'd', 'e'],
'f' : [False, True, True, False, True]})
#Überprüfen Sie den Datenrahmen
df
|
a |
b |
c c |
d |
e |
f |
0 |
1 |
10 |
1 |
2.0 |
a |
False |
1 |
2 |
8 |
3 |
NaN |
b |
True |
2 |
3 |
6 |
5 |
inf |
c |
True |
3 |
4 |
4 |
7 |
NaN |
d |
False |
4 |
5 |
2 |
9 |
10.0 |
e |
True |
10 Auswahlen der Datenextraktion
- [Bedingungsextraktion in 1 Spalte](Bedingungsextraktion in Spalte 1)
- [Bedingungsextraktion mit mehreren Spalten](# Bedingungsextraktion mit mehreren Spalten)
- [Bedingungsextraktion von Spalten, die Leerzeichen in Spaltennamen enthalten](# Bedingungsextraktion von Spalten, die Leerzeichen in Spaltennamen enthalten)
- [Bedingungsextraktion nach Zeichenkettenspezifikation](# Bedingungsextraktion nach Zeichenkettenspezifikation)
- [Bedingungsextraktion durch mehrere Bedingungen](# Bedingungsextraktion durch mehrere Bedingungen)
- [Bedingungsextraktion nach inf-Spezifikation](Bedingungsextraktion nach # inf-Spezifikation)
- [Bedingungsextraktion durch Angabe eines fehlenden Werts](# Bedingungsextraktion durch Angabe eines fehlenden Werts)
- [Bedingungsextraktion durch Angabe eines Booleschen Werts](# Bedingte Extraktion durch Angabe eines Booleschen Werts)
- [Bedingungsextraktion mit Liste](# Bedingungsextraktion mit Liste)
- [Bedingungsextraktion mit Variablen](# Bedingungsextraktion mit Variablen)
Bedingungsextraktion in einer Spalte
Grundlegende bedingte Extraktion mit nur einer Spalte des Datenrahmens. Normale Vergleichsoperatoren können verwendet werden.
df.query('a == 3') #Extrahieren Sie Zeilen, in denen Spalte a den Wert 3 hat
|
a |
b |
c c |
d |
e |
f |
2 |
3 |
6 |
5 |
inf |
c |
True |
df.query('a != 3') #Extrahieren Sie Zeilen, bei denen der Wert in Spalte a nicht 3 ist.
|
a |
b |
c c |
d |
e |
f |
0 |
1 |
10 |
1 |
2.0 |
a |
False |
1 |
2 |
8 |
3 |
NaN |
b |
True |
3 |
4 |
4 |
7 |
NaN |
d |
False |
4 |
5 |
2 |
9 |
10.0 |
e |
True |
df.query('a > 3') #Extrahieren Sie Zeilen mit einer Spalte mit einem Wert größer als 3
|
a |
b |
c c |
d |
e |
f |
3 |
4 |
4 |
7 |
NaN |
d |
False |
4 |
5 |
2 |
9 |
10.0 |
e |
True |
Bedingungsextraktion in mehreren Spalten
Bedingte Extraktion mit Werten zwischen mehreren Spalten
df.query('a > b') #Extrahieren Sie Zeilen, in denen der Wert in Spalte a größer als der Wert in Spalte b ist
|
a |
b |
c c |
d |
e |
f |
4 |
5 |
2 |
9 |
10.0 |
e |
True |
Bedingte Extraktion von Spalten mit Leerzeichen in Spaltennamen
Wenn der Spaltenname Leerzeichen enthält, muss der Spaltenname in Anführungszeichen (\ `) eingeschlossen werden.
Da diese Funktion in Pandas 0.25.0 implementiert wurde, tritt in Version 0.24.0 oder früher ein Fehler auf.
https://pandas-docs.github.io/pandas-docs-travis/whatsnew/v0.25.0.html#other-enhancements
df.query(' `c c` > b') #c Extrahieren Sie Zeilen, in denen der Wert in Spalte c größer als der Wert in Spalte b ist
|
a |
b |
c c |
d |
e |
f |
3 |
4 |
4 |
7 |
NaN |
d |
False |
4 |
5 |
2 |
9 |
10.0 |
e |
True |
Bedingungsextraktion durch Angabe einer Zeichenfolge
Wenn die Bedingung als Zeichenfolge angegeben wird, muss der Wert in doppelte Anführungszeichen (") gesetzt werden.
df.query('e == "a" ') #Der Wert in Spalte e ist eine Zeichenfolge"a"Extrahieren Sie die Linie, die ist
|
a |
b |
c c |
d |
e |
f |
0 |
1 |
10 |
1 |
2.0 |
a |
False |
Bedingungsextraktion durch mehrere Bedingungen
Bedingungsextraktion unter Verwendung mehrerer Bedingungen und logischer Operatoren wie und und oder.
df.query('a > 2 and b < 3') #Extrahieren Sie Zeilen, in denen der Wert in Spalte a größer als 2 und der Wert in Spalte b kleiner als 3 ist
|
a |
b |
c c |
d |
e |
f |
4 |
5 |
2 |
9 |
10.0 |
e |
True |
df.query('a > 2 or b < 3') #Extrahieren Sie Zeilen, in denen der Wert in Spalte a größer als 2 oder der Wert in Spalte b kleiner als 3 ist
|
a |
b |
c c |
d |
e |
f |
2 |
3 |
6 |
5 |
inf |
c |
True |
3 |
4 |
4 |
7 |
NaN |
d |
False |
4 |
5 |
2 |
9 |
10.0 |
e |
True |
df.query('a > 2 or e == "d" ') #Der Wert in Spalte a ist größer als 2 oder der Wert in Spalte e ist eine Zeichenfolge"d"Extrahieren Sie die Linie, die ist
|
a |
b |
c c |
d |
e |
f |
2 |
3 |
6 |
5 |
inf |
c |
True |
3 |
4 |
4 |
7 |
NaN |
d |
False |
4 |
5 |
2 |
9 |
10.0 |
e |
True |
df.query(' 2<= a <= 4') #Extrahieren Sie Zeilen, in denen der Wert in Spalte a 2 oder mehr und 4 oder weniger beträgt
|
a |
b |
c c |
d |
e |
f |
1 |
2 |
8 |
3 |
NaN |
b |
True |
2 |
3 |
6 |
5 |
inf |
c |
True |
3 |
4 |
4 |
7 |
NaN |
d |
False |
Bedingungsextraktion durch Angabe von inf
Wenn der Wert inf hat, extrahieren Sie wie folgt.
df.query(' d == inf') #Extrahieren Sie Zeilen, in denen der Wert in Spalte d inf ist
|
a |
b |
c c |
d |
e |
f |
2 |
3 |
6 |
5 |
inf |
c |
True |
df.query(' d != inf') #Extrahieren Sie Zeilen, in denen der Wert in Spalte d nicht inf ist
|
a |
b |
c c |
d |
e |
f |
0 |
1 |
10 |
1 |
2.0 |
a |
False |
1 |
2 |
8 |
3 |
NaN |
b |
True |
3 |
4 |
4 |
7 |
NaN |
d |
False |
4 |
5 |
2 |
9 |
10.0 |
e |
True |
Bedingungsextraktion durch Angabe fehlender Werte
Wenn der Wert einen fehlenden Wert hat, extrahieren Sie ihn wie folgt.
df.query(' d != d') #Extrahieren Sie Zeilen, in denen der Wert in Spalte d fehlt
|
a |
b |
c c |
d |
e |
f |
1 |
2 |
8 |
3 |
NaN |
b |
True |
3 |
4 |
4 |
7 |
NaN |
d |
False |
df.query(' d == d') #Extrahieren Sie Zeilen, in denen der Wert in Spalte d nicht fehlt
|
a |
b |
c c |
d |
e |
f |
0 |
1 |
10 |
1 |
2.0 |
a |
False |
2 |
3 |
6 |
5 |
inf |
c |
True |
4 |
5 |
2 |
9 |
10.0 |
e |
True |
Bedingungsextraktion durch Angabe eines booleschen Werts
Wenn der Wert einen booleschen Wert wie True oder False hat, extrahieren Sie ihn wie folgt.
df.query('f == True') #Extrahieren Sie Zeilen, in denen der Wert in Spalte f True ist
|
a |
b |
c c |
d |
e |
f |
1 |
2 |
8 |
3 |
NaN |
b |
True |
2 |
3 |
6 |
5 |
inf |
c |
True |
4 |
5 |
2 |
9 |
10.0 |
e |
True |
df.query('f == False') #Extrahieren Sie Zeilen, in denen der Wert in Spalte f False ist
|
a |
b |
c c |
d |
e |
f |
0 |
1 |
10 |
1 |
2.0 |
a |
False |
3 |
4 |
4 |
7 |
NaN |
d |
False |
Bedingte Extraktion anhand einer Liste
Die bedingte Extraktion ist abhängig davon, ob der Wert in der Liste enthalten ist.
df.query(' a in (1, 2, 3)') #Der Wert in Spalte a ist(1, 2, 3)Extrahieren Sie eine Zeile, die eine von ist
|
a |
b |
c c |
d |
e |
f |
0 |
1 |
10 |
1 |
2.0 |
a |
False |
1 |
2 |
8 |
3 |
NaN |
b |
True |
2 |
3 |
6 |
5 |
inf |
c |
True |
df.query(' a not in (1, 2, 3)') #Der Wert in Spalte a ist(1, 2, 3)Extrahieren Sie eine Zeile, die keine ist
|
a |
b |
c c |
d |
e |
f |
3 |
4 |
4 |
7 |
NaN |
d |
False |
4 |
5 |
2 |
9 |
10.0 |
e |
True |
Bedingte Extraktion mit Variablen
Es ist möglich, eine im Voraus vorbereitete Variable als Wert der Bedingung zu verwenden.
x = 2 #Speichern Sie 2 in der Variablen x
df.query(' a == @x') #Extrahieren Sie Zeilen, in denen der Wert in Spalte a x ist
|
a |
b |
c c |
d |
e |
f |
1 |
2 |
8 |
3 |
NaN |
b |
True |
y = [2, 3, 4] #Liste in Variable y speichern
df.query('a in @y') #Extrahieren Sie Zeilen, bei denen der Wert in Spalte a einer von y ist
|
a |
b |
c c |
d |
e |
f |
1 |
2 |
8 |
3 |
NaN |
b |
True |
2 |
3 |
6 |
5 |
inf |
c |
True |
3 |
4 |
4 |
7 |
NaN |
d |
False |