반응형
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')
반응형
'Data Analysis > Python' 카테고리의 다른 글
[Python] 대용량 데이터csv 읽어오기 (PyArrow) (0) | 2023.01.07 |
---|---|
[python] 서울시전월세_매물_위도,경도_구하기_GoogleMapAPI (0) | 2023.01.06 |
[Python] Python에서 youtube 불러오기 (0) | 2023.01.06 |
[Python] 왜 For 문 옆에는 : 을 붙여야 할까? (2) | 2023.01.05 |
[Airflow] Airflow 설치법(LOCAL) - 도커랑 vs code 필요 (0) | 2023.01.04 |
댓글