>  기사  >  백엔드 개발  >  Pandas DataFrame에서 쉼표로 구분된 셀을 여러 행으로 어떻게 분할할 수 있나요?

Pandas DataFrame에서 쉼표로 구분된 셀을 여러 행으로 어떻게 분할할 수 있나요?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-11-03 05:05:03568검색

How can I split a comma-separated cell into multiple rows in a Pandas DataFrame?

Pandas 데이터 프레임에서 셀을 여러 행으로 분할

Pandas는 쉼표로 구분된 여러 값이 포함된 셀을 분할하는 기능을 포함하여 데이터 조작을 위한 포괄적인 도구를 제공합니다. 여러 행으로. 이 가이드에서는 pandas 버전에 따라 두 가지 접근 방식을 사용하여 이를 달성하는 방법을 살펴보겠습니다.

pandas >= 0.25

pandas 버전 0.25 이상의 경우 다음 조합을 사용할 수 있습니다. Apply, str.split 및 Series.explode를 사용하여 원하는 결과를 얻을 수 있습니다. 코드 조각은 다음과 같습니다.

<code class="python">(df.set_index(['order_id', 'order_date'])
   .apply(lambda x: x.str.split(',').explode())
   .reset_index())                                                   </code>

설명:

  1. set_index(['order_id', 'order_date']): order_id 및 order_date 열을 설정합니다. 후속 작업 중에 보존하기 위한 인덱스로 사용됩니다.
  2. apply(lambda x: x.str.split(',').explode()): 각 행에 람다 함수를 적용합니다. 쉼표 구분 기호로 셀 값(패키지 및 패키지_코드)을 분할하고 결과 목록을 여러 행으로 분해합니다.
  3. reset_index(): 인덱스를 재설정하여 분해된 값을 별도의 행으로 사용하여 새 DataFrame을 생성합니다.

pandas <= 0.24

pandas 버전 0.24 이하의 경우 stack, unstack 및 str.split과 관련된 보다 복잡한 접근 방식이 필요합니다.

<code class="python">(df.set_index(['order_date', 'order_id'])
   .stack()
   .str.split(',', expand=True)
   .stack()
   .unstack(-2)
   .reset_index(-1, drop=True)
   .reset_index()
)</code>

설명:

  1. 이전 접근 방식과 유사하게 set_index는 order_date 및 order_id를 인덱스로 설정합니다.
  2. stack()은 행을 축소하고 행을 스택으로 쌓습니다. 단일 열.
  3. str.split(',', Expand=True)은 결합된 값을 쉼표 구분 기호를 기준으로 여러 열로 분할합니다.
  4. stack()은 열을 쌓아 단일 열을 만듭니다.
  5. unstack(-2)는 마지막 두 번째 수준에서 DataFrame의 스택을 해제하여 분할 값이 포함된 행을 생성합니다.
  6. reset_index(-1, drop=True)는 추가 수준을 제거합니다.
  7. reset_index()는 새 DataFrame을 생성하기 위해 새 인덱스를 추가합니다.

두 메서드 모두 그림과 같이 분해된 값이 별도의 행으로 포함된 새 DataFrame을 반환합니다. 귀하가 제공한 원하는 출력.

위 내용은 Pandas DataFrame에서 쉼표로 구분된 셀을 여러 행으로 어떻게 분할할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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