Durch Kommas getrennte Zeichenfolgeneinträge in einem Pandas-DataFrame aufteilen, um separate Zeilen zu erstellen
Problem:
Wir einen Pandas DataFrame haben, der Zeichenfolgen mit durch Kommas getrennten Werten in einer Spalte enthält. Wir möchten jeden CSV-Eintrag aufteilen und für jeden eindeutigen Wert eine neue Zeile erstellen. Beispielsweise sollte aus „a,b,c“ „a“, „b“, „c“ werden.
Lösung:
Option 1: DataFrame.explode() (Pandas 0.25.0)
Die Methode DataFrame.explode() wurde speziell für diesen Zweck entwickelt. Es ermöglicht uns, eine listenartige Spalte (in diesem Fall unsere durch Kommas getrennten Zeichenfolgen) in einzelne Zeilen aufzuteilen.
In [1]: df.explode('var1') Out[1]: var1 var2 var3 0 a 1 XX 1 b 1 XX 2 c 1 XX 3 d 2 ZZ 4 e 2 ZZ 5 f 2 ZZ 6 x 2 ZZ 7 y 2 ZZ
Option 2: Benutzerdefinierte vektorisierte Funktion
Wenn DataFrame.explode() nicht verfügbar ist oder wir weitere Anpassungen benötigen, können wir unsere eigene vektorisierte Version erstellen Funktion:
import numpy as np def explode(df, lst_cols, fill_value='', preserve_index=False): # Convert `lst_cols` to a list if it is a string. if isinstance(lst_cols, str): lst_cols = [lst_cols] # Calculate the lengths of each list in `lst_cols`. lens = df[lst_cols[0]].str.len() # Create a new index based on the lengths of the lists. idx = np.repeat(df.index.values, lens) # Create a new DataFrame with the exploded columns. exp_df = pd.DataFrame({ col: np.repeat(df[col].values, lens) for col in df.columns.difference(lst_cols) }, index=idx).assign(**{ col: np.concatenate(df.loc[lens > 0, col].values) for col in lst_cols }) # Append rows with empty lists if necessary. if (lens == 0).any(): exp_df = exp_df.append(df.loc[lens == 0, df.columns.difference(lst_cols)], sort=False).fillna(fill_value) # Revert the original index order and reset the index if requested. exp_df = exp_df.sort_index() if not preserve_index: exp_df = exp_df.reset_index(drop=True) return exp_df
Beispielverwendung:
In [2]: explode(df, 'var1') Out[2]: var1 var2 var3 0 a 1 XX 1 b 1 XX 2 c 1 XX 3 d 2 ZZ 4 e 2 ZZ 5 f 2 ZZ 6 x 2 ZZ 7 y 2 ZZ
Das obige ist der detaillierte Inhalt vonWie teile ich durch Kommas getrennte Zeichenfolgen in einem Pandas-DataFrame in separate Zeilen auf?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!