首页 >后端开发 >Python教程 >如何有效地拆分 Pandas DataFrame 中的逗号分隔字符串?

如何有效地拆分 Pandas DataFrame 中的逗号分隔字符串?

Linda Hamilton
Linda Hamilton原创
2024-12-19 06:18:15932浏览

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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn