[PYTHON] Zusammenfassung der von Pandas 2 häufig ausgeführten Prozesse (Datenreferenz, Bearbeitungsvorgang)

In Fortsetzung von Letztes Mal möchte ich diesmal die Prozesse zusammenfassen, die häufig beim Referenzieren und Bearbeiten von Daten verwendet werden.

Führen Sie zunächst den folgenden Code aus, um einen Beispieldatenrahmen zu erstellen.

import pandas as pd

df = pd.DataFrame({
    'name' : ['userA', 'userB', 'userC', 'userD', 'userE'],
    'age' : [20, 25, 41, 33, 22],
    'sex' : ['male', 'female', 'female', 'male', 'male'],
    'price' : 10000
})
name age sex price
0 userA 20 male 10000
1 userB 25 female 10000
2 userC 41 female 10000
3 userD 33 male 10000
4 userE 22 male 10000

Um eine bestimmte Spalte zu erhalten

Wenn durch den Spaltennamen (Spaltenname) angegeben, sind die Daten der entsprechenden Spalte Sie können es im Serienformat erhalten.

df['name']
name
0 userA
1 userB
2 userC
3 userD
4 userE

Beim Abrufen mehrerer Spalten

Wenn Sie in der Liste der Spaltennamen (Spaltennamen) angeben, werden die Daten der entsprechenden Spalte (Plural) angezeigt. Es kann in Form von DataFrame bezogen werden.

target_columns_list = ['name', 'age']
df[target_columns_list]
name age
0 userA 20
1 userB 25
2 userC 41
3 userD 33
4 userE 22

Beim Hinzufügen einer neuen Spalte

Wenn Sie einen neuen Spaltennamen angeben und eine Zuweisungsoperation ausführen, wird die Spalte hinzugefügt.

df['new'] = df['age'] * 10
name age sex price new
0 userA 20 male 10000 200
1 userB 25 female 10000 250
2 userC 41 female 10000 410
3 userD 33 male 10000 330
4 userE 22 male 10000 220

Beim Abrufen nur bestimmter Zeilendaten

Wenn Sie nur bestimmte Zeilendaten abrufen möchten, geben Sie in der loc-Methode einen Index an. Sie können die Daten der angegebenen Zeile im Serienformat abrufen.

df.loc[0]
name age sex price
0 userA 20 male 10000

Beim Abrufen mehrerer Datenzeilen

Wenn Sie mehrere Datenzeilen abrufen möchten, geben Sie eine Liste der Indizes in der loc-Methode an. Sie können alle Daten in der angegebenen Zeile im DataFrame-Format abrufen.

target_index_list = [0, 1, 2]
df.loc[target_index_list]
name age sex price
0 userA 20 male 10000
1 userB 25 female 10000
2 userC 41 female 10000

Beim Abrufen von Daten durch Angabe von Zeilen und Spalten

Es ist keine sehr häufige Operation, aber wenn Sie den Index- und Spaltennamen in der loc-Methode angeben, Es kann nur das angegebene Element erfasst werden.


df.loc[1, 'sex']
# female

#Wenn Sie dem oben erhaltenen Element eine Zuordnung vornehmen, wird diese aktualisiert.
df.loc[1, 'sex'] = 'updated'
name age sex price
0 userA 20 male 10000
1 userB 25 updated 10000
2 userC 41 female 10000
3 userD 33 male 10000
4 userE 22 male 10000

Beim Extrahieren von Zeilen durch Angabe von Bedingungen

#Zum Beispiel beim Extrahieren von Zeilen ab 25 Jahren
df[(df['age'] >= 25)]

#Am Anfang~Wenn Sie hinzufügen, wird es NICHT
df[~(df['age'] >= 25)]

#Beim Extrahieren von Zeilen mit UND
df[(df['age'] >= 25) & (df['sex'] == 'female')]

#Beim Extrahieren von Zeilen mit ODER
df[(df['age'] < 25) | (df['age'] > 40)]

Das folgende Beispiel zeigt das Extrahieren von Zeilen mit AND.

name age sex price
1 userB 25 female 10000
2 userC 41 female 10000

Bei der Berechnung von Statistiken mit groupby

#Dies ist praktisch, wenn Sie das Ergebnis der Berechnung von Statistiken für jede Kategorie zum ursprünglichen Datenrahmen hinzufügen möchten.
#Im Folgenden wird das Durchschnittsalter für jedes Geschlecht berechnet
#Andere Statistiken können berechnet werden, indem das für die Transformation angegebene Argument geändert wird.
df['average_age_by_sex'] = df.groupby('sex')['age'].transform('mean')

#Wenn Sie nur den Durchschnitt mit Jupiter-Notebook usw. sehen möchten, ist Folgendes in Ordnung
# df.groupby('sex')['age'].mean()
name age sex price new average_age_by_sex
0 userA 20 male 10000 200 25
1 userB 25 female 10000 250 33
2 userC 41 female 10000 410 33
3 userD 33 male 10000 330 25
4 userE 22 male 10000 220 25

Bei der Implementierung der einfachsten Schleifenverarbeitung in Pandas

Bei Iterrows sind der Index und die Daten in dieser Zeile zeilenweise im Serienformat. Sie können es bei bekommen. Wenn jedoch die Anzahl der Zeilen im Datenrahmen zunimmt, verlangsamt sich die Verarbeitung, sodass ich denke, dass der Datenrahmen etwa 100 Zeilen umfasst und nur verwendet werden kann, wenn Sie ein wenig überspringen möchten.

for index, row in df.iterrows():
    print(index)
    print(type(row))

Beim Erstellen einer neuen Spalte unter Bezugnahme auf eine bestimmte Spalte

In Fällen wie dem Titel und wenn Sie die if-Anweisung verwenden möchten, möchten Sie zeilenweise mit iterrows verarbeiten. In den meisten Fällen ist es jedoch besser, unter dem Gesichtspunkt der Verarbeitungsgeschwindigkeit anzuhalten. ist. In diesem Fall können Sie den Prozess mithilfe der unten gezeigten Apply-Methode beschleunigen.

df['age_boundary'] = df['age'].apply(lambda x: '25 Jahre und älter' if x >=25 else 'Unter 25 Jahren')

#Selbst wenn Sie eine Funktion definieren und an die Methode apply übergeben, ist das Ergebnis dasselbe
# def get_age_boundary(age):
#     if age >= 25:
#         return '25 Jahre und älter'
#     else:
#         return 'Unter 25 Jahren'

# df['age_boundary'] = df['age'].apply(get_age_boundary)

name age sex price age_boundary
0 userA 20 male 10000 Unter 25 Jahren
1 userB 25 female 10000 25 Jahre und älter
2 userC 41 female 10000 25 Jahre und älter
3 userD 33 male 10000 25 Jahre und älter
4 userE 22 male 10000 Unter 25 Jahren

Beim Erstellen einer neuen Spalte unter Bezugnahme auf mehrere Spalten

In einigen Fällen müssen Sie möglicherweise auf mehrere Spalten verweisen, um eine neue Spalte zu erstellen. In diesem Fall können Sie auf den Wert jeder Spalte für jede Zeile verweisen, indem Sie das Argument axis = 1 der Methode apply angeben.

def get_price_with_discount_rate(row):

    age = row['age']
    price = row['price']
    
    discount_rate = 1.0
    
    if age >= 40:
        discount_rate = 0.5
            
    return int(price * discount_rate)

df['price_with_discount_rate'] = df.apply(get_price_with_discount_rate, axis=1)

name age sex price price_with_discount_rate
0 userA 20 male 10000 10000
1 userB 25 female 10000 10000
2 userC 41 female 10000 5000
3 userD 33 male 10000 10000
4 userE 22 male 10000 10000

Bei Verwendung von np.vectorize

Im obigen Fall, in dem eine neue Spalte unter Bezugnahme auf mehrere Spalten erstellt wurde, haben wir die Methode zum Angeben des Arguments Achse = 1 der Methode apply angewendet. Diese Methode weist jedoch ein Problem hinsichtlich der Verarbeitungsgeschwindigkeit auf. Als Alternative zu den oben genannten habe ich es in der Praxis nicht verwendet, aber Sie können die Verwendung der Vektorisierungsmethode von Numpy in Betracht ziehen.

import numpy as np

def get_price_with_discount_rate(age, price):
        
    discount_rate = 1.0
    
    if age >= 40:
        discount_rate = 0.5
            
    return int(price * discount_rate)

vectorized_func=np.vectorize(get_price_with_discount_rate)
df['price_with_discount_rate'] = vectorized_func(df['age'], df['price'])

name age sex price price_with_discount_rate
0 userA 20 male 10000 10000
1 userB 25 female 10000 10000
2 userC 41 female 10000 5000
3 userD 33 male 10000 10000
4 userE 22 male 10000 10000

Gegenseitige Umwandlung von Serien, ndarray, Liste

Konvertieren zwischen Pandas Series-, NumPy ndarray- und Python-Standardlisten Ich vergesse es oft, deshalb werde ich es hier zusammenfassen.


import numpy as np

# Series → ndarray
df['name'].values

# ndarray → list
df['name'].values.tolist()

# list → Series
pd.Series([1, 2, 3, 4, 5])

# list → ndarray
np.array([1, 2, 3, 4, 5])


Beim Schreiben dieses Artikels habe ich auf die folgenden Websites verwiesen. http://sinhrks.hatenablog.com/entry/2015/07/11/223124 https://qiita.com/3x8tacorice/items/3cc5399e18a7e3f9db86 https://note.nkmk.me/python-pandas-numpy-conversion/

Recommended Posts

Zusammenfassung der von Pandas 2 häufig ausgeführten Prozesse (Datenreferenz, Bearbeitungsvorgang)
Zusammenfassung der häufig verwendeten Grammatik bei Pandas
Zusammenfassung der häufig verwendeten Methoden bei Pandas
Verarbeiten von Memos, die häufig bei Pandas (Anfängern) verwendet werden
Datenverarbeitungstipps mit Pandas
Überprüfen Sie die Datenzusammenfassung in CASTable
Zusammenfassung der von Pandas 1 häufig ausgeführten Prozesse (CSV-, Excel-Datei-bezogene Vorgänge)
Zusammenfassung der Wahrscheinlichkeitsverteilungen, die häufig in Statistiken und Datenanalysen vorkommen
RDS-Daten über die Schrittplattform werden an Pandas gesendet
Behandeln Sie 3D-Datenstrukturen mit Pandas
Beispiel für eine effiziente Datenverarbeitung mit PANDAS