將Pandas DataFrame 字串條目分解(拆分)為單獨的行
在Pandas 中,一個常見的要求是將逗號分隔的值拆分為文字字串列並為每個條目建立一個新行。這可以透過各種方法來實現。
使用Series.explode()或DataFrame.explode()
對於Pandas版本0.25.0以上版本,Series. explode() 和DataFrame.explode( ) 方法提供了一種類似於CSV的爆炸方式columns:
對於單列:
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='')
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3