Rumah > pembangunan bahagian belakang > Tutorial Python > Bagaimana untuk Memisahkan Nilai Dipisahkan Koma dalam Pandas DataFrame kepada Baris Berasingan?

Bagaimana untuk Memisahkan Nilai Dipisahkan Koma dalam Pandas DataFrame kepada Baris Berasingan?

Mary-Kate Olsen
Lepaskan: 2024-12-24 18:06:15
asal
267 orang telah melayarinya

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

Pecah (Meletup) Kemasukan Rentetan Bingkai Data Panda untuk Mengasingkan Baris

Masalah:
Memanipulasi bingkai data Pandas mengandungi lajur nilai dipisahkan koma, matlamatnya adalah untuk memisahkan setiap medan CSV kepada baris individu, mengekalkan struktur data asal.

Penyelesaian:

Penyelesaian yang disyorkan ialah memanfaatkan kaedah Pandas Series.explode() atau DataFrame.explode(), diperkenalkan dalam Pandas 0.25.0 dan dipertingkatkan dalam Pandas 1.3.0 untuk menyokong berbilang lajur meletup.

Untuk meletupkan satu lajur, gunakan Series.explode():

df.explode('column_name')
Salin selepas log masuk

Untuk berbilang lajur, gunakan DataFrame.explode():

df.explode(['column1', 'column2'])
Salin selepas log masuk

Contoh:

df = pd.DataFrame({
    'A': [[0, 1, 2], 'foo', [], [3, 4]],
    'B': 1,
    'C': [['a', 'b', 'c'], np.nan, [], ['d', 'e']]
})

df.explode('A')
Salin selepas log masuk

Output:

     A  B          C
0    0  1  [a, b, c]
0    1  1  [a, b, c]
0    2  1  [a, b, c]
1  foo  1        NaN
2  NaN  1         []
3    3  1     [d, e]
3    4  1     [d, e]
Salin selepas log masuk

Untuk pendekatan yang lebih generik yang berfungsi untuk berbilang lajur biasa dan senarai , pertimbangkan fungsi berikut:

def explode(df, lst_cols, fill_value='', preserve_index=False):
    # Ensure `lst_cols` is list-alike
    if lst_cols and not isinstance(lst_cols, (list, tuple, np.ndarray, pd.Series)):
        lst_cols = [lst_cols]

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

    # Preserve original index values
    idx = np.repeat(df.index.values, lens)

    # Create an "exploded" DataFrame
    res = (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 (lens == 0).any():
        res = (res.append(df.loc[lens==0, df.columns.difference(lst_cols)], sort=False)
                  .fillna(fill_value))

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

    return res
Salin selepas log masuk

Contoh meletup seperti CSV lajur:

df = pd.DataFrame({
    'var1': 'a,b,c d,e,f,x,y'.split(),
    'var2': [1, 2]
})

explode(df.assign(var1=df.var1.str.split(',')), 'var1')
Salin selepas log masuk

Output:

  var1  var2
0    a     1
1    b     1
2    c     1
3    d     2
4    e     2
5    f     2
6    x     2
7    y     2
Salin selepas log masuk

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

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan