Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimana untuk Memisahkan Rentetan Dipisahkan Koma dengan Cekap dalam Pandas DataFrames?
Data input selalunya berstruktur dengan nilai yang dipisahkan oleh aksara seperti koma. Apabila bekerja dengan bingkai data Pandas, adalah perlu untuk memisahkan entri rentetan ini dan membuat baris berasingan untuk setiap nilai. Dalam artikel ini, kami akan menyelidiki kaedah yang tersedia untuk mencapai matlamat ini dengan cekap.
Diperkenalkan dalam Pandas versi 0.25.0 dan 1.3.0, Kaedah .explode() menawarkan penyelesaian yang mudah dan cekap untuk meletupkan lajur yang mengandungi senarai atau tatasusunan. Ia beroperasi pada kedua-dua lajur tunggal dan berbilang, memberikan fleksibiliti dalam mengendalikan set data kompleks.
Sintaks:
dataframe.explode(column_name)
Contoh:
import pandas as pd # Dataframe with a column containing comma-separated values df = pd.DataFrame({'var1': ['a,b,c', 'd,e,f'], 'var2': [1, 2]}) # Exploding the 'var1' column df = df.explode('var1') # Resulting dataframe with separate rows for each value print(df)
Untuk senario yang lebih kompleks di mana letupan berbilang lajur diperlukan, fungsi tersuai vektor boleh menyediakan penyelesaian serba boleh:
Fungsi Definisi:
def explode(df, lst_cols, fill_value='', preserve_index=False): # Calculate lengths of lists lens = df[lst_cols[0]].str.len() # Repeat values for non-empty lists res = (pd.DataFrame({ col:np.repeat(df[col].values, lens) for col in df.columns.difference(lst_cols)}, index=np.repeat(df.index.values, lens)) .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 index order and reset index if requested res = res.sort_index() if not preserve_index: res = res.reset_index(drop=True) return res
Contoh:
# Dataframe with multiple columns containing lists df = pd.DataFrame({ 'var1': [['a', 'b'], ['c', 'd']], 'var2': [['x', 'y'], ['z', 'w']] }) # Exploding 'var1' and 'var2' columns df = explode(df, ['var1', 'var2']) # Resulting dataframe with separate rows for each list item print(df)
Pendekatan lain melibatkan penggunaan .transform() untuk memohon fungsi tersuai yang memisahkan entri rentetan dan mencipta baharu baris:
Fungsi Tersuai:
def split_fun(row): return [row['var1'].split(',')]
Contoh:
# Dataframe with a column containing comma-separated values df = pd.DataFrame({'var1': ['a,b,c', 'd,e,f'], 'var2': [1, 2]}) # Creating a new column with split values using transform df['var1_split'] = df.transform(split_fun) # Unnest the newly created column to separate rows df = df.unnest('var1_split') # Resulting dataframe with separate rows for each value print(df)
Bergantung pada keperluan khusus dan kerumitan set data, kaedah yang berbeza boleh digunakan untuk memisahkan entri rentetan yang dipisahkan koma dalam bingkai data Pandas. Menggunakan kaedah .explode() menawarkan pendekatan yang mudah dan cekap, manakala fungsi vektor tersuai memberikan fleksibiliti untuk mengendalikan senario yang lebih kompleks.
Atas ialah kandungan terperinci Bagaimana untuk Memisahkan Rentetan Dipisahkan Koma dengan Cekap dalam Pandas DataFrames?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!