Ich habe einen Datensatz mit 19 Spalten und ungefähr 250.000 Zeilen. Ich habe mit größeren Datensätzen gearbeitet, aber dieses Mal entschied sich Pandas, mit meinen Nerven zu spielen.
Ich habe versucht, den ursprünglichen Datensatz anhand einiger einfacher Regeln in drei Unterdatenrahmen aufzuteilen. Die Ausführung des Codes dauert jedoch lange. Etwa 15-20 Sekunden nur für die Filterung.
Gibt es eine alternative Möglichkeit, die Leistung des Codes zu verbessern?
import pandas as pd
#read dataset
df = pd.read_csv('myData.csv')
#create a dataframe with col1 10 and col2 <= 15
df1 = df[(df.col1 == 10) & (df.col2 <= 15)]
df = df[~df.isin(df1)].dropna()
#create a dataframe with col3 7 and col4 >= 4
df2 = df[(df.col3 == 7) & (df.col4 >= 4)]
df = df[~df.isin(df2)].dropna()
Am Ende habe ich die df1, df2, df
Datenrahmen mit den gefilterten Daten.
quelle
Haben Sie festgelegt, welche Zeile Ihres Codes am zeitaufwändigsten ist? Ich vermute, dass die Leitung
df = df[~df.isin(df1)].dropna()
lange dauern würde. Wäre es schneller, wenn Sie einfach die Negation der Bedingung verwenden, die Sie angewendet haben, um zu erhaltendf1
, wenn Sie Zeilendf1
aus herausfiltern möchtendf
?Das heißt, verwenden
df = df[(df.col1 != 10) | (df.col2 > 15)]
.quelle
Zusätzlich zu den Vorschlägen in den anderen Antworten ist es hilfreich, wenn wir die Suchfelder zum DataFrame-Index hinzufügen. Ref: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html
Pandas DataFrames unterstützen auch Multi-Index. Ref: https://pandas.pydata.org/pandas-docs/stable/user_guide/advanced.html
Ein Beispiel finden Sie hier https://stackoverflow.com/a/58061800/2130670
quelle