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.
#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')
df2 = df.copy()
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
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.
len(df)
len(df['id'].unique())
df['id'].value_counts()
#Ü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'])})
#Legen Sie die Zielspalte in der Teilmenge fest und löschen Sie Duplikate
df.drop_duplicates(subset=['name', 'cd'], keep='first', inplace=True)
#Ä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']
#In Zeichenfolgentyp konvertieren
df['sales_date'].astype(str)
# True,Falsch zu 1,In 0 konvertieren
(df['sales']>2000).astype(int)
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
df.loc[df['age10']=='60er Jahre', 'age10'] = '60er Jahre以上'
(df['sales'] != 0).apply(int) #Wenn der Umsatz nicht 0 ist, wird 1 markiert
#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))
#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)
#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']])
from sklearn import preprocessing
scaler = preprocessing.MinMaxScaler()
scaler.fit(customer[['sales']])
customer['sales_mm'] = scaler.transform(customer[['sales']])
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.
#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
#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']]
# "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
#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)
#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
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
df.quantile([0, 0.25, 0.5, 0.75, 1.0])[['amount']]
#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')
#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')
#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
#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()))
#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)
#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'])
Während des Studiums bezog ich mich auf Folgendes. Vielen Dank.