ホームページ >バックエンド開発 >Python チュートリアル >Pandas DataFrame 文字列エントリを別々の行に分解 (分割) する方法は?
Pandas DataFrame 文字列エントリを個別の行に分解 (分割)する
Pandas では、カンマ区切りの値を 1 つの行に分割することが一般的な要件です。テキスト文字列列を作成し、エントリごとに新しい行を作成します。これは、さまざまな方法で実現できます。
Series.explode() または DataFrame.explode() を使用する
Pandas バージョン 0.25.0 以降の場合は、Series。 explode() メソッドと DataFrame.explode() メソッドは、CSV のように展開する便利な方法を提供します。列:
単一列の場合:
df.explode('column_name')
複数の列の場合:
df.explode(['column1', 'column2']) # Pandas 1.3.0+
汎用ベクトル化関数
より汎用性の高いベクトル化アプローチ通常の列とリスト列の両方で機能するものを以下に示します。
def explode(df, lst_cols, fill_value='', preserve_index=False): # Convert CSV string columns to list columns for col in lst_cols: df[col] = df[col].str.split(',') # Extract all non-list columns idx_cols = df.columns.difference(lst_cols) # Calculate list lengths lens = df[lst_cols[0]].str.len() # Create exploded DataFrame result = (pd.DataFrame({ col: np.repeat(df[col].values, lens) for col in idx_cols }, index=np.repeat(df.index.values, lens)) .assign(**{col: np.concatenate(df.loc[lens>0, col].values) for col in lst_cols})) # Handle empty list rows if (lens == 0).any(): result = result.append(df.loc[lens==0, idx_cols], sort=False).fillna(fill_value) # Revert index order and reset index if requested result = result.sort_index() if not preserve_index: result = result.reset_index(drop=True) return result
アプリケーション
CSV 列:
df['var1'] = df['var1'].str.split(',')
複数のリスト列:
explode(df, ['num', 'text'], fill_value='')
以上がPandas DataFrame 文字列エントリを別々の行に分解 (分割) する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。