[PYTHON] Persönliche Notizen zu Pandas-bezogenen Vorgängen, die in der Praxis verwendet werden können

0. Einleitung

Kürzlich habe ich Pandas durch Lösen von Data Science 100 Knock (Strukturierte Datenverarbeitung) studiert. Zuerst suchte ich nach den Teilen, die ich nicht verstand, ohne die Antworten zu betrachten, löste alle Fragen und studierte dann, indem ich die Antworten abgleichte. In dieser Studie fasste ich jedoch die Prozesse zusammen, von denen ich dachte, dass ich sie in der Praxis für mich selbst verwenden könnte. Es war.

1. Vorverarbeitung des Dataset-Ladevorgangs

Dateieingabe / -ausgabe

#Datei lesen. Der Zeichencode ist UTF-8, Tab getrennt
df = pd.read_csv('data/d.csv', header=0, encoding='utf-8', sep='\t')
#Datei schreiben. Es gibt einen Header und der Zeichencode ist UTF-8, Komma getrennt
df.to_csv('data/d.csv', header=True, encoding='utf-8', sep=',')
#Datei schreiben. Kein Header, Zeichencode ist CP932, Tabulator getrennt
df.to_csv('data/d.csv', header=False, encoding='cp932', sep='\t') 

Kopie des Datenrahmens

df2 = df.copy()

Verbinden von Datenrahmen mit Schlüsseln

pd.merge(df_receipt, df_store[['store_cd', 'store_name']], on='store_cd', how='inner')
#inner:Innere Verbindung, left:Linke äußere Verbindung, right:Rechte äußere Verbindung, outer:Vollständige äußere Verbindung

Datenrahmenverkettung

pd.concat([df1, df2], axis=1)
#Übergeben Sie es im Gegensatz zum Zusammenführen als Liste. Achse Achse=Wenn 0, vertikal, Achse=Wenn es 1 ist, werden sie in horizontaler Richtung kombiniert.

Anzahl der Datenrahmen (Anzahl der Zeilen)

len(df)

Einzigartige Nummer

len(df['id'].unique())

Der eindeutige Elementwert und sein Erscheinungsbild zählen

df['id'].value_counts()

Umgang mit fehlenden Werten

#Überprüfen Sie die Anzahl der fehlenden Elemente in jeder Spalte
df.isnull().sum()
#Löschen Sie Datensätze, die mindestens einen fehlenden Wert enthalten
df.dropna()
#fillna ist ein Wörterbuchtyp und kann sofort angegeben werden
df.fillna({'price': mean(df['price']),
           'cost': median(df['cost'])}) 

Doppelte Entfernung

#Legen Sie die Zielspalte in der Teilmenge fest und löschen Sie Duplikate
df.drop_duplicates(subset=['name', 'cd'], keep='first', inplace=True)

Spalte umbenennen

#Ändern Sie einen beliebigen Spaltennamen mit Umbenennen
df.rename(columns={'ymd':'sales_date'}, inplace=True)
#Schreiben Sie direkt in die Liste
df.columns = ['category', 'price', 'cost']

Typ gegossen

#In Zeichenfolgentyp konvertieren
df['sales_date'].astype(str)
# True,Falsch zu 1,In 0 konvertieren
(df['sales']>2000).astype(int)

Wertersetzung

code_dict = {
    'A': 11,
    'B': 22,
    'C': 33,
    'D': 44
}
df['name'].replace(code_dict) #Wenn sie nicht übereinstimmen, lassen Sie sie wie sie sind
df['name'].map(code_dict) #NAN, wenn sie nicht übereinstimmen

Greifen Sie auf Zeilen zu, die die Bedingungen erfüllen, und weisen Sie Werte zu

df.loc[df['age10']=='60er Jahre', 'age10'] = '60er Jahre以上'

Setzen Sie ein 0-1-Flag, um festzustellen, ob die Bedingungen erfüllt sind

(df['sales'] != 0).apply(int) #Wenn der Umsatz nicht 0 ist, wird 1 markiert

Konvertieren Sie, indem Sie eine Funktion auf eine Spalte anwenden

#Abrunden
df['price'].apply(lambda x: np.round(x))
# 1.Mit 1 multiplizieren und nach dem Dezimalpunkt abschneiden
df['price'].apply(lambda x: np.floor(x * 1.1))
#Gemeinsamer Logarithmus (unten)=10)
df['sales'].apply(lambda x: math.log10(x))

Konvertieren Sie, indem Sie eine Funktion auf mehrere Spalten anwenden

#Machen Sie den Unterschied zwischen den Monaten in den beiden Spalten
df[['end_date', 'start_date']].apply(\
    lambda x: relativedelta(x[0], x[1]).years * 12 + relativedelta(x[0], x[1]).months, axis=1)
#X für fehlende Werte[1](Mesian). Ansonsten wie es ist
df[['price', 'median_price']].apply(\
    lambda x: np.round(x[1]) if np.isnan(x[0]) else x[0], axis=1)

Standardwerte (Mittelwert 0, Standardabweichung 1)

#Beim Schreiben in einer Zeile
df['sales_ss'] = preprocessing.scale(df['sales'])
from sklearn import preprocessing
scaler = preprocessing.StandardScaler()
scaler.fit(customer[['sales']])
customer['sales_ss'] = scaler.transform(customer[['sales']])

Normalisieren Sie den Wert (Minimalwert 0, Maximalwert 1)

from sklearn import preprocessing
scaler = preprocessing.MinMaxScaler()
scaler.fit(customer[['sales']])
customer['sales_mm'] = scaler.transform(customer[['sales']])

Erstellen Sie eine Dummy-Variable

pd.get_dummies(df, columns=['cd'])
#Wenn Spalten angegeben sind, können nur bestimmte Spalten angewendet werden, und es kann ein Dummy sein, auch wenn es sich nicht um einen Objekttyp handelt.

String-Manipulation

#Extraktion der ersten 3 Zeichen
df['name'].str[0:3]
#Verkettung von Strings
df['gender'].str.cat((df['age10']).astype(str)) #Kombinieren Sie die Zeichenfolgen für Geschlecht und Alter10

Extraktion von Zeilen nach numerischen Bedingungen

#Datenextraktion nach Abfragemethode. Kann einfach geschrieben werden, wenn mehrere Bedingungen angegeben werden
df[['sales_date', 'id', 'cd', 'quantity', 'amount']]\
    .query('id == "XXXX" & (amount >= 1000 | quantity >=5)')
#(Referenz) Wenn die Abfragemethode nicht verwendet wird, ist es kompliziert, wenn die Bedingungen kompliziert sind.
target = (df['id']=="XXXX") & ((df['amount']>=1000) | (df['quantity']>=5))
df[target][['sales_date', 'id', 'cd', 'quantity', 'amount']]

Extraktion von Zeilen nach Zeichenfolgenbedingung

# "SASS"Zeilen extrahieren, die mit beginnen
df['store'].str.startswith('SASS')
#Zeilen extrahieren, die mit 1 enden
df['id'].str.endswith('1')
#Extrahieren Sie Linien einschließlich Sapporo
df['address'].str.contains('Sapporo')
#Beurteilung mit regulären Ausdrücken
df['cd'].str.contains('^[A-D]', regex=True) #Beginnen Sie mit einem von A bis D.
df['cd'].str.contains('[1-9]$', regex=True) #Endet mit einem von 1-9
df['cd'].str.contains('^[A-D].*[1-9]$', regex=True) #Beginnt mit A bis D und endet mit 1-9
df['tel'].str.contains('^[0-9]{3}-[0-9]{3}-[0-9]{4}', regex=True) #3-stellige Telefonnummer-3 Ziffern-4 Ziffern

2. Aggregation

Sortieren

#Sortieren Sie in absteigender Reihenfolge nach Verkaufsspalte
df.sort_values('sales', ascending=True).head(10) #Wenn auf False gesetzt, aufsteigende Reihenfolge
#Sortieren nach mehreren Spalten. Sie können auch absteigende oder aufsteigende Reihenfolge für jede Spalte angeben.
df.sort_values(['sales', 'id'], ascending=[False, True])
#In absteigender Reihenfolge der Verkäufe (aufsteigend=Falsch) den Rang runter. Methode='min'Wenn dann die Werte gleich sind, werden die gleichen Nummern zugewiesen.
df['sales'].rank(method='min', ascending=False)

Aggregation nach Gruppe nach

#Wählen Sie die Aggregationsfunktion aus, die für jede zu aggregierende Spalte angewendet werden soll
df.groupby('id', as_index=False).agg({'amount':'sum', 'quantity':'sum'}) 
#Wenden Sie mehrere Aggregate auf eine Spalte an
df.groupby('id', as_index=False).agg({'ymd':['max', 'min']})
#Beliebige Funktion (hier pd.Series.Modus) angegeben
df.groupby('id', as_index=False).agg({'cd': pd.Series.mode})
#Geben Sie die anonyme Funktion Lambda an
df.groupby('id', as_index=False).agg({'amount': lambda x: np.var(x)})
#Es ist auch möglich, ohne Verwendung der Agg-Funktion zu schreiben
df.groupby('id', as_index=False).max()[['id', 'ymd']]
df.groupby('id', as_index=False).sum()[['id', 'amount', 'quantity']]
#(Referenz) Verwenden Sie die Funktion agg, wenn Sie die häufigsten Werte (Modi) nach Gruppe nach aggregieren
df.groupby('id', as_index=False).mode() #Ich bekomme eine Fehlermeldung

Kreuztabelle

pd.pivot_table(df, index='age10', columns='gender', values='amount', aggfunc='sum')
#index:Vorderseite, columns:Vorderseite, values:Zielwert, aggfunc:Aggregationsmethode)
pd.pivot_table(sales, index='id', columns='year', values='amount', aggfunc='sum', margins=True) 
#margins=Wenn True, können Sie Summen und Zwischensummen abrufen

Berechnung des Quadranten

df.quantile([0, 0.25, 0.5, 0.75, 1.0])[['amount']]

3. Datums- und Uhrzeitverarbeitung

Zeitvariablenkonvertierung

#Zeichenfolge → Datum / Uhrzeit-Typ
pd.to_datetime(df['str_date'])
#Epoche Sekunden → Datum / Uhrzeit-Typ
pd.to_datetime(df['epoch'], unit='s')
#Datum / Uhrzeit Typ → Epoche Sekunden
df['date'].astype(np.int64) // 10**9
#Datum / Uhrzeit Typ → Zeichenfolge%Y:4 Ziffern pro Jahr, %m:2 Ziffern pro Monat, %d:Zwei Ziffern pro Tag. * *%Beachten Sie, dass die Bedeutung zwischen Groß- und Kleinschreibung unterschiedlich ist. Zum Beispiel%M bedeutet Minuten
df['date'].dt.strftime('%Y%m%d')

Extrahieren Sie Jahres-, Monats- und Tagesinformationen aus der Datenvariablen

#Jahresinformationen extrahieren. Sie können den Monat für Monat und das Datum für Tag abrufen
t.dt.year
#Verwenden Sie strftime, um eine 0-aufgefüllte zweistellige Zeichenfolge zu erhalten
t.dt.strftime('%d')

Zeitvariable Differenz

#Subtrahieren Sie einfach den Datums- / Uhrzeittyp, um die Differenz in Tagen zu erhalten
df['end_date'] - df['start_date']
#Verwenden Sie das relative Delta, um die Differenz zwischen den Monaten zu ermitteln
relativedelta(x0, x1).years * 12 + relativedelta(x0, x1).months

Tagesbearbeitung

#Geben Sie den Tag als Zahl (die Anzahl der Tage ab Montag) mit der Wochentagsfunktion aus
df['Ab Montag sind Tage vergangen'] = df['ymd'].apply(lambda x: x.weekday())
#Holen Sie sich das Datum des Montags der Woche
df['Montag der Woche'] = df['ymd'].apply(lambda x: x - relativedelta(days=x.weekday()))

Zeitreihenverarbeitung

#Unterschied von vor 1 Mal
df['sales'].diff(1)
#Änderungsrate von vor einmal
df['sales'].pct_change(1)
#Wert vor einmal
df['sales'].shift(1)
#Wert vor 2 Punkten
df['sales'].shift(2)

4. Probenahme

Stichproben

#Zufällig 10%Abtastung der Daten von
df.sample(frac=0.1, random_state=5) 
#Zufällig 10 basierend auf dem Prozentsatz des Geschlechts%Daten geschichtete Extraktion
_, test = train_test_split(df, test_size=0.1, stratify=df['gender'], random_state=5)
#8 für Trainingsdaten und Testdaten:Teilen Sie durch ein Verhältnis von 2
df_train, df_test = train_test_split(df, test_size=0.2, random_state=5) 
# 1:Unterabtastung auf 1
r = RandomUnderSampler(random_state=5)
df_sample, _ = r.fit_sample(df, df['flag'])

Referenz

Während des Studiums bezog ich mich auf Folgendes. Vielen Dank.

Recommended Posts

Persönliche Notizen zu Pandas-bezogenen Vorgängen, die in der Praxis verwendet werden können
Ein Timer (Ticker), der im Feld verwendet werden kann (kann überall verwendet werden)
Funktionen, die in der for-Anweisung verwendet werden können
Sammlung von Numpy, Pandas Tipps, die häufig auf dem Feld verwendet werden
Grundlegende Algorithmen, die bei Wettkampfprofis eingesetzt werden können
Eine Code-Sammlung, die häufig in persönlichem Python verwendet wird
ANTs Bildregistrierung, die in 5 Minuten verwendet werden kann
Zusammenfassung der statistischen Datenanalysemethoden mit Python, die im Geschäftsleben verwendet werden können
Goroutine (parallele Steuerung), die im Feld eingesetzt werden kann
Goroutine, die im Feld verwendet werden kann (errgroup.Group Edition)
Skripte, die bei der Verwendung von Bottle in Python verwendet werden können
Bewertungsindex, der für GridSearchCV von sklearn angegeben werden kann
Kann mit AtCoder verwendet werden! Eine Sammlung von Techniken zum Zeichnen von Kurzcode in Python!
[Python] Ein Memo häufig verwendeter Phrasen in Python-Skripten
Erstellen Sie eine Spinbox, die mit Tkinter in Binär angezeigt werden kann
Zusammenfassung der Standardeingabe von Python, die in Competition Pro verwendet werden kann
Erstellen Sie eine Spinbox, die mit Tkinter in HEX angezeigt werden kann
Ich habe einen Tri-Tree geschrieben, der für die Implementierung von Hochgeschwindigkeitswörterbüchern in D-Sprache und Python verwendet werden kann
Ich habe eine generische Python-Projektvorlage erstellt
Zusammenfassung der häufig verwendeten Methoden bei Pandas
[Linux] Liste der in der Praxis verwendeten Linux-Befehle
Maximale Anzahl von Funktionsparametern, die in jeder Sprache definiert werden können
Zusammenfassung der von Pandas 1 häufig ausgeführten Prozesse (CSV-, Excel-Datei-bezogene Vorgänge)
Eine Geschichte, die Heroku, die in 5 Minuten gemacht werden kann, tatsächlich 3 Tage dauerte
[Python3] Code, der verwendet werden kann, wenn Sie ein Bild in einer bestimmten Größe ausschneiden möchten
Hinweise zum Erstellen von Zahlen, die mit matplotlib in Zeitschriften veröffentlicht werden können
Ich möchte eine Prioritätswarteschlange erstellen, die mit Python (2.7) aktualisiert werden kann.
Wenn "kann beim Erstellen eines PIE-Objekts nicht verwendet werden" in make angezeigt wird
Einfache Programminstallation und automatische Programmaktualisierung, die in jeder Sprache verwendet werden kann
Zusammenfassung der Scikit-Learn-Datenquellen, die beim Schreiben von Analyseartikeln verwendet werden können
So installieren Sie die Python-Bibliothek, die von Pharmaunternehmen verwendet werden kann
Kratzmodul "Gaspacho", das einfacher zu verwenden ist als Beautiful Soup
Erstellen von Sphinx, das mit Markdown geschrieben werden kann
Zusammenfassung dessen, was bei 100 Pandas-Schlägen verwendet wurde (# 1 ~ # 32)
Liste der Tools, mit denen Sie auf einfache Weise die Emotionsanalyse japanischer Sätze mit Python ausprobieren können (versuchen Sie es mit Google Colab).
[Python] Ich habe eine Praxis untersucht, die durch asynchrone Verarbeitung (Multiprocessing, Asyncio) parallel zum Hauptthread ausgeführt werden kann.
Übersicht und nützliche Funktionen von Scikit-Learn, die auch für Deep Learning verwendet werden können
Konvertieren Sie Bilder aus dem FlyCapture SDK in ein Formular, das mit openCV verwendet werden kann
Einführung des automatischen Bildersammlungspakets "icrawler" (0.6.3), das beim maschinellen Lernen verwendet werden kann
Ein Hinweis, der einen Job in Python implementiert, der eine GCS-Datei in BigQuery lädt
Visualisierung von geografischen Informationen von R und Python, die von Power BI ausgedrückt werden können
[Python] Einführung in das WEB-Scraping | Zusammenfassung der Methoden, die mit dem Webdriver verwendet werden können
Ich habe versucht, eine Memo-App zu erstellen, die Pomodoro sein kann, aber eine Reflexionsaufzeichnung
So erstellen Sie eine Eigenschaft von Beziehungen, die durch bestimmte Bedingungen vorab abgerufen werden kann
Ein Mechanismus zum Aufrufen von Ruby-Methoden aus Python, der in 200 Zeilen ausgeführt werden kann
Einfache Statistiken, mit denen die Auswirkungen von Maßnahmen auf EG-Standorte und Codes analysiert werden können, die in Jupyter-Notebooks verwendet werden können
Hinweise zu Python-Kenntnissen, die mit AtCoder verwendet werden können
Eine Sammlung häufig verwendeter Befehle in der Serververwaltung
Shell-Programm, das in Vielfachen von 3 aho wird
Kann bei Wettkampfprofis eingesetzt werden! Python-Standardbibliothek
[Django] Über Benutzer, die für Vorlagen verwendet werden können
So richten Sie einen einfachen SMTP-Server ein, der lokal in Python getestet werden kann
[Django] Feldnamen, die für das Benutzermodell, die Benutzerregistrierung und die Anmeldemethoden verwendet werden können
[Python3] Code, der verwendet werden kann, wenn Sie die Größe von Bildern Ordner für Ordner ändern möchten
[Atcoder] [C ++] Ich habe ein Testautomatisierungstool erstellt, das während des Wettbewerbs verwendet werden kann
[Python] Ein Programm, um die Anzahl der Äpfel und Orangen zu ermitteln, die geerntet werden können
Formatübersicht der Formate, die mit gensim serialisiert werden können
Ist Ihre DLL eine DLL, die Multi-Core nutzen kann?
Grundkenntnisse in DNS, die jetzt nicht zu hören sind