위와 같이 한 셀에 들어있는 문자열을 컴마로 구분해서 한 글자씩 여러 행으로 나누고 싶다.
해결책:
문자열을 split 해 각 행을 여러 컬럼으로 나눈 후 병합하는 방법으로 구현할 수 있다.
먼저, 각 alphabet 컬럼의 문자열을 배열로 나눈다.
1 2
result = df['alphabet'].str.split(',') result
0 [hello, world, in, python]
1 [python, is, great]
2 [data, science]
Name: alphabet, dtype: object
배열이 Series를 리턴하게 apply를 적용하면 Series -> DataFrame으로 변환할 수 있다.
1 2
result = result.apply(lambda x: pd.Series(x)) result
0
1
2
3
0
hello
world
in
python
1
python
is
great
NaN
2
data
science
NaN
NaN
stack()을 활용하여 컬럼을 행으로 변환한다.
1
result.stack()
0 0 hello
1 world
2 in
3 python
1 0 python
1 is
2 great
2 0 data
1 science
dtype: object
stack()을 실행하면, 위와 같이 멀티 인덱스를 가진 Series가 된다.
알파벳 낱자만 가져오기 위해 인덱스를 초기화하고, 기준이 된 인덱스도 제거해보자.
1
result.stack().reset_index(level=1, drop=True)
0 hello
0 world
0 in
0 python
1 python
1 is
1 great
2 data
2 science
dtype: object
데이터프레임으로 변환하자
1 2
result = result.stack().reset_index(level=1, drop=True).to_frame('alphabet_single') result
alphabet_single
0
hello
0
world
0
in
0
python
1
python
1
is
1
great
2
data
2
science
원본 프레임과 위의 프레임을 merge 해보자
1 2
result = df.merge(result, left_index=True, right_index=True, how='left') result
alphabet
alphabet_single
0
hello,world,in,python
hello
0
hello,world,in,python
world
0
hello,world,in,python
in
0
hello,world,in,python
python
1
python,is,great
python
1
python,is,great
is
1
python,is,great
great
2
data,science
data
2
data,science
science
You need to set install_url to use ShareThis. Please set it in _config.yml.