ホームページ >バックエンド開発 >Python チュートリアル >Pandas DataFrame でカンマ区切りの文字列を効率的に分割するにはどうすればよいですか?
入力データは、多くの場合、カンマなどの文字で区切られた値で構造化されます。 Pandas データフレームを操作する場合、これらの文字列エントリを分割し、値ごとに個別の行を作成する必要があります。この記事では、この目標を効率的に達成するために利用できるメソッドについて詳しく説明します。
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 サイトの他の関連記事を参照してください。