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

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

Linda Hamilton
Linda Hamiltonオリジナル
2024-12-19 06:18:15944ブラウズ

How to Efficiently Split Comma-Separated Strings in Pandas DataFrames?

Pandas DataFrame でのカンマ区切りの文字列エントリの分割

入力データは、多くの場合、カンマなどの文字で区切られた値で構造化されます。 Pandas データフレームを操作する場合、これらの文字列エントリを分割し、値ごとに個別の行を作成する必要があります。この記事では、この目標を効率的に達成するために利用できるメソッドについて詳しく説明します。

Pandas の .explode() メソッドの利用

Pandas バージョン 0.25.0 および 1.3.0 で導入されました。 .explode() メソッドは、リストまたは配列を含む列を分解するための簡単で効率的なソリューションを提供します。単一列と複数列の両方で動作し、複雑なデータセットを柔軟に処理できます。

構文:

dataframe.explode(column_name)

例:

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)

複数を展開するためのカスタムのベクトル化関数列

複数の列の展開が必要なより複雑なシナリオの場合、カスタムのベクトル化関数で多用途のソリューションを提供できます。

関数定義:

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

例:

# 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)

グループ化による変換

別のアプローチには、.transform() を使用して適用することが含まれます。文字列エントリを分割し、新しい文字列を作成するカスタム関数行:

カスタム関数:

def split_fun(row):
    return [row['var1'].split(',')]

例:

# 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)

結論

データセットの特定の要件と複雑さに応じて、さまざまな方法を使用して分割できます。 Pandas データフレーム内のカンマ区切りの文字列エントリ。 .explode() メソッドを使用すると、直接的で効率的なアプローチが提供され、カスタムのベクトル化関数により、より複雑なシナリオを処理するための柔軟性が提供されます。

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

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。