首頁 > 後端開發 > Python教學 > 如何將 Pandas DataFrame 字串條目分解(拆分)為單獨的行?

如何將 Pandas DataFrame 字串條目分解(拆分)為單獨的行?

Susan Sarandon
發布: 2024-12-21 05:26:14
原創
614 人瀏覽過

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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板