输入数据通常由用逗号等字符分隔的值构成。使用 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中文网其他相关文章!