Eingabedaten sind häufig mit Werten strukturiert, die durch Zeichen wie Kommas getrennt sind. Bei der Arbeit mit Pandas-Datenrahmen ist es erforderlich, diese Zeichenfolgeneinträge aufzuteilen und für jeden Wert separate Zeilen zu erstellen. In diesem Artikel werden wir uns mit den verfügbaren Methoden befassen, um dieses Ziel effizient zu erreichen.
Eingeführt in den Pandas-Versionen 0.25.0 und 1.3.0 Die Methode .explode() bietet eine unkomplizierte und effiziente Lösung zum Explodieren von Spalten, die Listen oder Arrays enthalten. Es arbeitet sowohl mit einzelnen als auch mit mehreren Spalten und bietet Flexibilität bei der Verarbeitung komplexer Datensätze.
Syntax:
dataframe.explode(column_name)
Beispiel:
import pandas as pd # Dataframe with a column containing comma-separated values df = pd.DataFrame({'var1': ['a,b,c', 'd,e,f'], 'var2': [1, 2]}) # Exploding the 'var1' column df = df.explode('var1') # Resulting dataframe with separate rows for each value print(df)
Für komplexere Szenarien, in denen Wenn mehrere Spalten aufgelöst werden müssen, kann eine benutzerdefinierte vektorisierte Funktion eine vielseitige Lösung bieten:
Funktionsdefinition:
def explode(df, lst_cols, fill_value='', preserve_index=False): # Calculate lengths of lists lens = df[lst_cols[0]].str.len() # Repeat values for non-empty lists res = (pd.DataFrame({ col:np.repeat(df[col].values, lens) for col in df.columns.difference(lst_cols)}, index=np.repeat(df.index.values, lens)) .assign(**{col:np.concatenate(df.loc[lens>0, col].values) for col in lst_cols})) # Append rows with empty lists if (lens == 0).any(): res = (res.append(df.loc[lens==0, df.columns.difference(lst_cols)], sort=False) .fillna(fill_value)) # Revert index order and reset index if requested res = res.sort_index() if not preserve_index: res = res.reset_index(drop=True) return res
Beispiel:
# Dataframe with multiple columns containing lists df = pd.DataFrame({ 'var1': [['a', 'b'], ['c', 'd']], 'var2': [['x', 'y'], ['z', 'w']] }) # Exploding 'var1' and 'var2' columns df = explode(df, ['var1', 'var2']) # Resulting dataframe with separate rows for each list item print(df)
Ein anderer Ansatz beinhaltet die Verwendung von .transform() zum Anwenden eine benutzerdefinierte Funktion, die die Zeichenfolgeneinträge aufteilt und neue Zeilen erstellt:
Benutzerdefinierte Funktion:
def split_fun(row): return [row['var1'].split(',')]
Beispiel:
# Dataframe with a column containing comma-separated values df = pd.DataFrame({'var1': ['a,b,c', 'd,e,f'], 'var2': [1, 2]}) # Creating a new column with split values using transform df['var1_split'] = df.transform(split_fun) # Unnest the newly created column to separate rows df = df.unnest('var1_split') # Resulting dataframe with separate rows for each value print(df)
Abhängig von den spezifischen Anforderungen und der Komplexität des Datensatzes können unterschiedliche Methoden zur Aufteilung eingesetzt werden Durch Kommas getrennte Zeichenfolgeneinträge in Pandas-Datenrahmen. Die Verwendung der Methode .explode() bietet einen unkomplizierten und effizienten Ansatz, während benutzerdefinierte vektorisierte Funktionen Flexibilität für die Handhabung komplexerer Szenarien bieten.
Das obige ist der detaillierte Inhalt vonWie kann man durch Kommas getrennte Zeichenfolgen in Pandas-DataFrames effizient aufteilen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!