스택큐힙리스트

판다스 컬럼의 리스트를 여러 개의 열로 분할하기 본문

카테고리 없음

판다스 컬럼의 리스트를 여러 개의 열로 분할하기

스택큐힙리스트 2023. 4. 28. 17:57
반응형

하나의 열(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 방식을 이용하여 리스트 열을 여러 개의 열로 분리할 수 있습니다. 이러한 방법을 활용하면 데이터를 더욱 효율적으로 다룰 수 있습니다.

반응형
Comments