>백엔드 개발 >파이썬 튜토리얼 >Pandas DataFrame 문자열 항목을 별도의 행으로 분해(분할)하는 방법은 무엇입니까?

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

Susan Sarandon
Susan Sarandon원래의
2024-12-21 05:26:14654검색

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='')

위 내용은 Pandas DataFrame 문자열 항목을 별도의 행으로 분해(분할)하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.