輸入資料通常由用逗號等字元分隔的值構成。使用 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)
分組轉換
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)
分組轉換
分組轉換>另一種方法涉及使用.transform()來應用一個自訂函數,用於分割字串條目並建立新的行:自訂函數:範例:結論根據資料集的具體要求和複雜程度,可以採用不同的方法進行分割Pandas資料框中以逗號分隔的字串條目。利用 .explode() 方法提供了一種簡單而高效的方法,而自訂向量化函數則為處理更複雜的場景提供了靈活性。以上是如何有效地拆分 Pandas DataFrame 中的逗號分隔字串?的詳細內容。更多資訊請關注PHP中文網其他相關文章!