「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > Pandas DataFrame 文字列エントリを別々の行に分解 (分割) する方法は?

Pandas DataFrame 文字列エントリを別々の行に分解 (分割) する方法は?

2024 年 12 月 25 日に公開
ブラウズ:135

How to Explode (Split) Pandas DataFrame String Entries into Separate Rows?

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='')
最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3