Pandas DataFrame 문자열 항목을 별도의 행으로 분해(분할)
Pandas에서 일반적인 요구 사항은 쉼표로 구분된 값을 텍스트 문자열 열을 선택하고 각 항목에 대해 새 행을 만듭니다. 이는 다양한 방법을 통해 달성할 수 있습니다.
Series.explode() 또는 DataFrame.explode()
Pandas 버전 0.25.0 이상의 경우 시리즈입니다. explode() 및 DataFrame.explode() 메서드는 CSV와 같은 열을 분해하는 편리한 방법을 제공합니다.
단일 열:
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