> 백엔드 개발 > 파이썬 튜토리얼 > Pandas DataFrames에서 목록 열을 중첩 해제하는 방법은 무엇입니까?

Pandas DataFrames에서 목록 열을 중첩 해제하는 방법은 무엇입니까?

Patricia Arquette
풀어 주다: 2024-12-30 19:21:10
원래의
294명이 탐색했습니다.

How to Unnest List Columns in Pandas DataFrames?

Pandas로 열 중첩 해제

목록 열이 포함된 DataFrame을 처리할 때 이러한 목록을 별도의 행으로 "펼치는" 것이 유용할 수 있습니다.

방법 1: DataFrame.explode() 사용(Pandas >= 0.25)

단일 열 폭발의 경우 폭발()을 직접 사용합니다.

df = pd.DataFrame({'A': [1, 2], 'B': [[1, 2], [1, 2]]})

df_exploded = df.explode('B')
로그인 후 복사

방법 2: 계열 적용

df_exploded = df.set_index('A').B.apply(pd.Series).stack().reset_index(level=0).rename(columns={0:'B'})
로그인 후 복사

방법 3: DataFrame 반복

df_exploded = pd.DataFrame({'A':df.A.repeat(df.B.str.len()),'B':np.concatenate(df.B.values)})
로그인 후 복사

방법 4: Reindex/Loc

df_exploded = df.reindex(df.index.repeat(df.B.str.len())).assign(B=np.concatenate(df.B.values))
로그인 후 복사

방법 5: ChainMap

from collections import ChainMap
d = dict(ChainMap(*map(dict.fromkeys, df['B'], df['A'])))
df_exploded = pd.DataFrame(list(d.items()),columns=df.columns[::-1])
로그인 후 복사

방법 6: Numpy

newvalues=np.dstack((np.repeat(df.A.values,list(map(len,df.B.values))),np.concatenate(df.B.values)))
df_exploded = pd.DataFrame(data=newvalues[0],columns=df.columns)
로그인 후 복사

방법 7: Iterator

from itertools import cycle,chain
l=df.values.tolist()
l1=[list(zip([x[0]], cycle(x[1])) if len([x[0]]) > len(x[1]) else list(zip(cycle([x[0]]), x[1]))) for x in l]
df_exploded = pd.DataFrame(list(chain.from_iterable(l1)),columns=df.columns)
로그인 후 복사

다중화로 일반화 열

여러 열에 대해 위 방법을 일반화하려면 다음 함수를 사용하세요.

def unnesting(df, explode):
    idx = df.index.repeat(df[explode[0]].str.len())
    df1 = pd.concat([
        pd.DataFrame({x: np.concatenate(df[x].values)}) for x in explode], axis=1)
    df1.index = idx
    
    return df1.join(df.drop(explode, 1), how='left')
로그인 후 복사

Column-Wise Unnesting

가로 중첩을 해제하려면 함수를 수정하세요.

def unnesting(df, explode, axis):
    if axis==1:
        # Previous implementation
    else :
        df1 = pd.concat([
                         pd.DataFrame(df[x].tolist(), index=df.index).add_prefix(x) for x in explode], axis=1)
        return df1.join(df.drop(explode, 1), how='left')
로그인 후 복사

위 내용은 Pandas DataFrames에서 목록 열을 중첩 해제하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿