ホームページ > バックエンド開発 > Python チュートリアル > Pandas DataFrame のカンマ区切りの文字列を別々の行に分割するにはどうすればよいですか?

Pandas DataFrame のカンマ区切りの文字列を別々の行に分割するにはどうすればよいですか?

Linda Hamilton
リリース: 2024-12-25 21:50:14
オリジナル
839 人が閲覧しました

How to Split Comma-Separated Strings in a Pandas DataFrame into Separate Rows?

Pandas DataFrame のカンマ区切りの文字列エントリを分割して個別の行を作成する

問題:
1 つの列にカンマ区切りの値を持つ文字列を含む Pandas DataFrame があります。各 CSV エントリを分割し、一意の値ごとに新しい行を作成したいと考えています。たとえば、「a,b,c」は「a」、「b」、「c」になります。

解決策:

オプション 1: DataFrame.explode() (Pandas 0.25.0 )

DataFrame.explode() メソッドは、この目的のために特別に設計されています。これにより、リストのような列 (この場合はカンマ区切りの文字列) を個々の行に分割できます。

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
ログイン後にコピー

オプション 2: カスタム ベクトル化関数

DataFrame.explode() が利用できない場合、またはさらにカスタマイズが必要な場合は、独自のベクトル化されたデータを作成できます関数:

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
ログイン後にコピー

使用例:

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
ログイン後にコピー

以上がPandas DataFrame のカンマ区切りの文字列を別々の行に分割するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート