> 백엔드 개발 > 파이썬 튜토리얼 > Pandas DataFrame의 쉼표로 구분된 값을 별도의 행으로 분할하는 방법은 무엇입니까?

Pandas DataFrame의 쉼표로 구분된 값을 별도의 행으로 분할하는 방법은 무엇입니까?

Mary-Kate Olsen
풀어 주다: 2024-12-24 18:06:15
원래의
267명이 탐색했습니다.

How to Split Comma-Separated Values in a Pandas DataFrame into Separate Rows?

Pandas 데이터 프레임 문자열 항목을 별도의 행으로 분할(분해)

문제:
Pandas 데이터 프레임 조작 쉼표로 구분된 값의 열을 포함하는 경우 목표는 각 CSV 필드를 다음으로 분할하는 것입니다. 원래 데이터 구조를 유지하면서 개별 행을 삭제합니다.

해결책:

권장되는 해결 방법은 Pandas Series.explode() 또는 DataFrame.explode() 메서드를 활용하는 것입니다. Pandas 0.25.0에 도입되었으며 Pandas 1.3.0에서 다중 열을 지원하도록 향상되었습니다. 폭발합니다.

단일 열을 분해하려면 Series.explode()를 사용합니다.

df.explode('column_name')
로그인 후 복사

여러 열의 경우 다음을 사용합니다. DataFrame.explode():

df.explode(['column1', 'column2'])
로그인 후 복사

예:

df = pd.DataFrame({
    'A': [[0, 1, 2], 'foo', [], [3, 4]],
    'B': 1,
    'C': [['a', 'b', 'c'], np.nan, [], ['d', 'e']]
})

df.explode('A')
로그인 후 복사

출력:

     A  B          C
0    0  1  [a, b, c]
0    1  1  [a, b, c]
0    2  1  [a, b, c]
1  foo  1        NaN
2  NaN  1         []
3    3  1     [d, e]
3    4  1     [d, e]
로그인 후 복사

여러 일반 및 목록 열에 작동하는 보다 일반적인 접근 방식 , 다음 기능을 고려하세요.

def explode(df, lst_cols, fill_value='', preserve_index=False):
    # Ensure `lst_cols` is list-alike
    if lst_cols and not isinstance(lst_cols, (list, tuple, np.ndarray, pd.Series)):
        lst_cols = [lst_cols]

    # Calculate lengths of lists
    lens = df[lst_cols[0]].str.len()

    # Preserve original index values
    idx = np.repeat(df.index.values, lens)

    # Create an "exploded" DataFrame
    res = (pd.DataFrame({
                col:np.repeat(df[col].values, lens)
                for col in df.columns.difference(lst_cols)
            },
            index=idx)
             .assign(**{col:np.concatenate(df.loc[lens>0, col].values)
                            for col in lst_cols}))

    # Append rows with empty lists
    if (lens == 0).any():
        res = (res.append(df.loc[lens==0, df.columns.difference(lst_cols)], sort=False)
                  .fillna(fill_value))

    # Revert to original index order and reset if requested
    res = res.sort_index()
    if not preserve_index:        
        res = res.reset_index(drop=True)

    return res
로그인 후 복사

CSV와 같은 폭발의 예 열:

df = pd.DataFrame({
    'var1': 'a,b,c d,e,f,x,y'.split(),
    'var2': [1, 2]
})

explode(df.assign(var1=df.var1.str.split(',')), 'var1')
로그인 후 복사

출력:

  var1  var2
0    a     1
1    b     1
2    c     1
3    d     2
4    e     2
5    f     2
6    x     2
7    y     2
로그인 후 복사

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

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