Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimana untuk Memisahkan Rentetan Dipisahkan Koma dalam Bingkai Data Pandas kepada Baris Berasingan?

Bagaimana untuk Memisahkan Rentetan Dipisahkan Koma dalam Bingkai Data Pandas kepada Baris Berasingan?

Linda Hamilton
Linda Hamiltonasal
2024-12-25 21:50:14838semak imbas

How to Split Comma-Separated Strings in a Pandas DataFrame into Separate Rows?

Memisahkan Entri Rentetan Dipisahkan Koma dalam Bingkai Data Pandas untuk Mencipta Baris Berasingan

Masalah:
Kami mempunyai Pandas DataFrame yang mengandungi rentetan dengan nilai dipisahkan koma dalam satu lajur. Kami ingin memisahkan setiap entri CSV dan mencipta baris baharu untuk setiap nilai unik. Contohnya, "a,b,c" hendaklah menjadi "a", "b", "c".

Penyelesaian:

Pilihan 1: DataFrame.explode() (Pandas 0.25.0 )

Kaedah DataFrame.explode() direka khusus untuk tujuan ini. Ia membenarkan kami membahagikan lajur seperti senarai (dalam kes ini, rentetan dipisahkan koma kami) kepada baris individu.

In [1]: df.explode('var1')
Out[1]:
  var1  var2 var3
0    a     1   XX
1    b     1   XX
2    c     1   XX
3    d     2   ZZ
4    e     2   ZZ
5    f     2   ZZ
6    x     2   ZZ
7    y     2   ZZ

Pilihan 2: Fungsi Vektor Tersuai

Jika DataFrame.explode() tidak tersedia atau kami memerlukan lebih banyak penyesuaian, kami boleh mencipta vektor kami sendiri fungsi:

import numpy as np

def explode(df, lst_cols, fill_value='', preserve_index=False):
    # Convert `lst_cols` to a list if it is a string.
    if isinstance(lst_cols, str):
        lst_cols = [lst_cols]

    # Calculate the lengths of each list in `lst_cols`.
    lens = df[lst_cols[0]].str.len()

    # Create a new index based on the lengths of the lists.
    idx = np.repeat(df.index.values, lens)

    # Create a new DataFrame with the exploded columns.
    exp_df = pd.DataFrame({
        col: np.repeat(df[col].values, lens)
        for col in df.columns.difference(lst_cols)
    }, index=idx).assign(**{
        col: np.concatenate(df.loc[lens > 0, col].values)
        for col in lst_cols
    })

    # Append rows with empty lists if necessary.
    if (lens == 0).any():
        exp_df = exp_df.append(df.loc[lens == 0, df.columns.difference(lst_cols)], sort=False).fillna(fill_value)

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

    return exp_df

Contoh penggunaan:

In [2]: explode(df, 'var1')
Out[2]:
  var1  var2 var3
0    a     1   XX
1    b     1   XX
2    c     1   XX
3    d     2   ZZ
4    e     2   ZZ
5    f     2   ZZ
6    x     2   ZZ
7    y     2   ZZ

Atas ialah kandungan terperinci Bagaimana untuk Memisahkan Rentetan Dipisahkan Koma dalam Bingkai Data Pandas kepada Baris Berasingan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn