首页 >后端开发 >Python教程 >如何将 Pandas DataFrame 字符串条目分解(拆分)为单独的行?

如何将 Pandas DataFrame 字符串条目分解(拆分)为单独的行?

Susan Sarandon
Susan Sarandon原创
2024-12-21 05:26:14614浏览

How to Explode (Split) Pandas DataFrame String Entries into Separate Rows?

将 Pandas DataFrame 字符串条目分解(拆分)为单独的行

在 Pandas 中,常见的要求是将逗号分隔的值拆分为文本字符串列并为每个条目创建一个新行。这可以通过各种方法来实现。

使用 Series.explode() 或 DataFrame.explode()

对于 Pandas 版本 0.25.0 及更高版本,Series. explode() 和 DataFrame.explode() 方法提供了一种类似于 CSV 的爆炸方式列:

对于单列:

df.explode('column_name')

对于多列:

df.explode(['column1', 'column2'])  # Pandas 1.3.0+

通用向量化函数

一种更通用的向量化方法下面提供了适用于普通列和列表列的方法:

def explode(df, lst_cols, fill_value='', preserve_index=False):
    # Convert CSV string columns to list columns
    for col in lst_cols:
        df[col] = df[col].str.split(',')

    # Extract all non-list columns
    idx_cols = df.columns.difference(lst_cols)

    # Calculate list lengths
    lens = df[lst_cols[0]].str.len()

    # Create exploded DataFrame
    result = (pd.DataFrame({
        col: np.repeat(df[col].values, lens)
        for col in idx_cols
    }, index=np.repeat(df.index.values, lens))
        .assign(**{col: np.concatenate(df.loc[lens>0, col].values)
                    for col in lst_cols}))

    # Handle empty list rows
    if (lens == 0).any():
        result = result.append(df.loc[lens==0, idx_cols], sort=False).fillna(fill_value)

    # Revert index order and reset index if requested
    result = result.sort_index()
    if not preserve_index:
        result = result.reset_index(drop=True)

    return result

应用程序

CSV 列:

df['var1'] = df['var1'].str.split(',')

多个列表列:

explode(df, ['num', 'text'], fill_value='')

以上是如何将 Pandas DataFrame 字符串条目分解(拆分)为单独的行?的详细内容。更多信息请关注PHP中文网其他相关文章!

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