"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > Pandas DataFrame 문자열 항목을 별도의 행으로 분해(분할)하는 방법은 무엇입니까?

Pandas DataFrame 문자열 항목을 별도의 행으로 분해(분할)하는 방법은 무엇입니까?

2024년 12월 25일에 게시됨
검색:454

How to Explode (Split) Pandas DataFrame String Entries into Separate Rows?

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