Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimana untuk Memisahkan Rentetan Dipisahkan Koma dalam Bingkai Data Pandas kepada Baris Berasingan?
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!