본문 바로가기
Data Analysis/Python

[Python] Pandas: 한 셀의 데이터를 여러 행으로 나누기

by Hagrid 2023. 1. 6.
반응형

 

 
Pandas: 한 셀의 데이터를 여러 행으로 나누기

 

df = pd.DataFrame({'foo': ['a,b,c,d,e', 'd,e,f', 'h,i']})

df

위와 같이 한 셀에 들어있는 문자열을 컴마로 구분해서 한 글자씩 여러 행으로 나누고 싶다.

 

해결책:

 

문자열을 split 해 각 행을 여러 컬럼으로 나눈 후 병합하는 방법으로 구현할 수 있다.

 

먼저, 각 foo 컬럼의 문자열을 배열로 나눈다.

split = df.foo.str.split(',')

split

 

 

각 배열이 Series를 리턴하게 apply를 적용하면, Series -> DataFrame으로 변환할 수 있다.

split = split.apply(lambda x: pd.Series(x))

split

 

 

  • stack() 으로 컬럼을 행으로 변환할 수 있다.

 

 

stack()을 실행하면, 위와 같이 멀티 인덱스를 가진 Series가 된다.

 

알파벳 낱자만 가져오기 위해 인덱스를 초기화하고, 기준이 된 인덱스도 제거해보자.

split.stack().reset_index(level=1, drop=True)

 

이 결과는 Series이기 때문에, DataFrame으로 변환해보자.

to_frame()이 파라미터로 컬럼명을 지정할 수 있다.

 

split = split.stack().reset_index(level=1, drop=True).to_frame('foo_single')

split

 

 

필요에 따라, 원본 프레임에 left join으로 머지하면 아래와 같이 의도했던 결과를 얻을 수 있다.

df.merge(split, left_index=True, right_index=True, how='left')

 

 
반응형

댓글