일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 컴퓨터과학
- 네트워크
- I'm Sorry
- 코딩
- 데이터구조
- 컴퓨터공학
- 프로그래밍
- 웹개발
- 딥러닝
- 데이터분석
- 사이버보안
- 2
- 빅데이터
- 클라우드컴퓨팅
- 자료구조
- 버전관리
- 자바스크립트
- 소프트웨어
- 프로그래밍언어
- 데이터과학
- 데이터베이스
- 컴퓨터비전
- 인공지능
- 보안
- 파이썬
- Yes
- 네트워크보안
- 머신러닝
- 알고리즘
- 소프트웨어공학
- Today
- Total
스택큐힙리스트
판다스 컬럼의 리스트를 여러 개의 열로 분할하기 본문
하나의 열(column)로 구성된 판다스 데이터프레임(DataFrame)이 있습니다.
import pandas as pd
df = pd.DataFrame({teams: [[SF, NYG] for _ in range(7)]})
teams
0 [SF, NYG]
1 [SF, NYG]
2 [SF, NYG]
3 [SF, NYG]
4 [SF, NYG]
5 [SF, NYG]
6 [SF, NYG]
이 리스트 열을 두 개의 열로 나눌 수 있는 방법은 무엇인가요?
원하는 결과:
team1 team2
0 SF NYG
1 SF NYG
2 SF NYG
3 SF NYG
4 SF NYG
5 SF NYG
6 SF NYG
답변 1
to_list 로 생성된 lists와 함께 DataFrame 생성자를 사용할 수 있습니다.
import pandas as pd
d1 = {'teams': [['SF', 'NYG'],['SF', 'NYG'],['SF', 'NYG'],
['SF', 'NYG'],['SF', 'NYG'],['SF', 'NYG'],['SF', 'NYG']]}
df2 = pd.DataFrame(d1)
print (df2)
teams
0 [SF, NYG]
1 [SF, NYG]
2 [SF, NYG]
3 [SF, NYG]
4 [SF, NYG]
5 [SF, NYG]
6 [SF, NYG]
df2[['team1','team2']] = pd.DataFrame(df2.teams.tolist(), index= df2.index)
print (df2)
teams team1 team2
0 [SF, NYG] SF NYG
1 [SF, NYG] SF NYG
2 [SF, NYG] SF NYG
3 [SF, NYG] SF NYG
4 [SF, NYG] SF NYG
5 [SF, NYG] SF NYG
6 [SF, NYG] SF NYG
그리고 새로운 DataFrame:
df3 = pd.DataFrame(df2['teams'].to_list(), columns=['team1','team2'])
print (df3)
team1 team2
0 SF NYG
1 SF NYG
2 SF NYG
3 SF NYG
4 SF NYG
5 SF NYG
6 SF NYG
$#*#&$^*$&을(를) 포함한 해결책은 매우 느립니다.
#7k rows
df2 = pd.concat([df2]*1000).reset_index(drop=True)
In [121]: %timeit df2['teams'].apply(pd.Series)
1.79 s ± 52.5 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
In [122]: %timeit pd.DataFrame(df2['teams'].to_list(), columns=['team1','team2'])
1.63 ms ± 54.3 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
답변 2
판다스는 파이썬에서 주로 사용되는 데이터 분석 라이브러리입니다. 판다스의 시리즈(Series) 데이터 타입은 리스트와 같지만, 하나의 시리즈 안에 여러 개의 리스트가 들어갈 수 있다는 장점이 있습니다. 이 경우, 리스트로 구성된 하나의 열(column)을 여러 개의 열로 분리하는 방법이 필요합니다. 이번 글에서는 이러한 상황에서 판다스의 함수를 활용하여 리스트 열을 여러 개의 열로 분리하는 방법을 알아보겠습니다.우선, 데이터프레임(DataFrame)을 생성하고, 열(Column)에 리스트(List)를 할당합니다. 다음과 같이 작성할 수 있습니다.
```
import pandas as pd
data = {'A': [[1, 2, 3], [4, 5, 6], [7, 8, 9]],
'B': [['a', 'b', 'c'], ['d', 'e', 'f'], ['g', 'h', 'i']]}
df = pd.DataFrame(data)
print(df)
```
출력 결과는 다음과 같습니다.
```
A B
0 [1, 2, 3] [a, b, c]
1 [4, 5, 6] [d, e, f]
2 [7, 8, 9] [g, h, i]
```
이제 이러한 데이터프레임에서 열(Column)을 분리하는 방법을 알아보겠습니다.
1. apply와 Series 함수를 이용하는 방법
apply와 Series 함수를 이용하면, 리스트 열을 여러 개의 열로 분리할 수 있습니다. 이 경우 apply 함수를 사용하여 Series 함수를 리스트 열에 적용한 결과를 새로운 DataFrame에 할당합니다.
```
df[['A1', 'A2', 'A3']] = df['A'].apply(pd.Series)
df[['B1', 'B2', 'B3']] = df['B'].apply(pd.Series)
print(df)
```
출력 결과는 다음과 같습니다.
```
A B A1 A2 A3 B1 B2 B3
0 [1, 2, 3] [a, b, c] 1 2 3 a b c
1 [4, 5, 6] [d, e, f] 4 5 6 d e f
2 [7, 8, 9] [g, h, i] 7 8 9 g h i
```
2. zip 함수와 unpacking을 이용하는 방법
파이썬에서는 zip 함수와 unpacking 방식을 이용해 여러 개의 변수에 값을 할당할 수 있습니다. 이를 이용하면, 리스트 열을 여러 개의 열로 간단하게 분리할 수 있습니다.
```
df['A1'], df['A2'], df['A3'] = zip(*df['A'])
df['B1'], df['B2'], df['B3'] = zip(*df['B'])
print(df)
```
출력 결과는 다음과 같습니다.
```
A B A1 A2 A3 B1 B2 B3
0 [1, 2, 3] [a, b, c] 1 2 3 a b c
1 [4, 5, 6] [d, e, f] 4 5 6 d e f
2 [7, 8, 9] [g, h, i] 7 8 9 g h i
```
이처럼, apply와 Series 함수, zip 함수와 unpacking 방식을 이용하여 리스트 열을 여러 개의 열로 분리할 수 있습니다. 이러한 방법을 활용하면 데이터를 더욱 효율적으로 다룰 수 있습니다.