Pandas실습 – Part2

Pandas는 데이터 분석 시 매우 자주 사용하는 라이브러리 중 하나로 Pandas실습 형태로 2차에 걸쳐 포스팅을 작성하였습니다. 이번 포스팅을 보시기 전에 이전 학습이 선행되어야 합니다. Pandas실습1 을 학습하지 않으셨다면, 아래 링크를 참고하셔서 먼저 학습을 진행해야 합니다.
Pandas실습 Part1

연습 삼아 질문을 직접 해 본 다음 제가 제시한 방법을 살펴보겠습니다.

Pandas실습 – Part2

Pandas실습 – Part2 11. DataFrame의 컬럼 누적합

예시 데이터를 아래와 같은 DataFrame으로 생성하겠습니다. 열의 누적 합계를 나타내는 적분 열에서 새 열을 생성하는 것입니다.

import pandas as pd
 
df = pd.DataFrame([[“A”, 1], [“B”, 2], [“C”, 3], [“D”, 4]],
                  columns=[“col_A”, “col_B”])
 
# 아래와 같은 결과를 산출할려면?
“””
col_A col_B col_C
0  A  1  1
1  B  2  3
2  C  3  6
3  D  4  10
“””

해결방안
여기에서 주어진 Series에 대해 cumsum() 메서드를 사용하고 아래와 같이 누적 합계를 얻을 수 있습니다.

df[“col_C”] = df.col_B.cumsum()
df[“col_C”]

0     1
1     3
2     6
3    10
Name: col_C, dtype: int64


Pandas실습12. 모든 그룹에 고유 ID 할당

다음으로 하나의 열에 반복 값이 있는 아래와 같은 DataFrame이 있습니다. 모든 그룹이 고유 번호를 갖도록 새 Series를 생성하는 것입니다. 아래에서 col_A의 값 “A”는 새 시리즈에서 값 1로 할당되었습니다. 또한 “A”가 나타날 때마다 group_num 열의 값은 항상 1입니다.

import pandas as pd

df = pd.DataFrame([[“A”, 1], [“B”, 2], [“A”, 3], [“D”, 4]],
                  columns=[“col_A”, “col_B”])
 
# 아래와 같은 결과를 산출할려면?
 
“””
col_Acol_Bgroup_num
0 A 1 1
1 B 2 2
2 A 3 1
3 D 4 3
“””

해결방안
여기서 groupby 다음에 아래와 같이 grouper.group_info 메서드를 사용할 수 있습니다.

df[“group_num”] = df.groupby(“col_A”).grouper.group_info[0] + 1
df[“group_num”]

0    1
1    2
2    1
3    3
Name: group_num, dtype: int64


Pandas실습13. 열에 NaN 값 여부 확인

다음 실습은 열에 NaN 값이 있는지 여부를 확인하는 것입니다. 열에 하나 이상의 NaN 값이 있는지 여부를 나타내는 True 또는 False만 있으면 NaN 값의 수 또는 기타 항목을 찾을 필요가 없습니다.

import pandas as pd
import numpy as np

df = pd.DataFrame([[“A”, np.NaN], [“A”, 2], [“C”, np.NaN], [“D”, 4]],
columns=[“col_A”, “col_B”])

col_A_check = ## 어떤 코드를 입력해야 할까?
# False

col_B_check = ## 어떤 코드를 입력해야 할까?
# True

해결방안
여기에서 일련의 hadans 방법을 사용하여 아래와 같이 원하는 결과를 얻을 수 있습니다.

col_A_check = df.col_A.hasnans
col_A_check

False

col_B_check = df.col_B.hasnans
col_B_check

True


Pandas실습14. 리스트를 DataFrame에 행으로 추가

파이썬 리스트에 요소를 삽입하는 방법은 누구나 알고 있습니다(리스트의 추가 방법 사용). 그러나 DataFrame에 새 행을 추가한 적이 있나요? 다음 작업을 위해 DataFrame과 DataFrame에 새 행으로 추가되어야 하는 리스트를 하나 생성하겠습니다.

import pandas as pd
 
df = pd.DataFrame([[“A”, 1], [“B”, 2], [“C”, 3], [“D”, 4]],
                  columns=[“col_A”, “col_B”])
 
new_row = [“E”, 5]
 
# 아래와 같은 결과를 산출할려면?
“””
col_Acol_B
0 A 1
1 B 2
2 C 3
3 D 4
4 E 5
“””
 

해결방안
여기에서 아래와 같이 loc을 사용하고 새 행을 DataFrame의 새 인덱스에 할당할 수 있습니다.

df.loc[df.shape[0]] = new_row
df

 col_Acol_B
0A1
1B2
2C3
3D4
4E5




Pandas실습15. 열에 있는 모든 고유 값의 첫 번째 행 가져오기

DataFrame이 주어지면 작업은 col_A 열의 모든 고유 요소가 처음 나타나는 전체 행을 가져오는 것입니다.

import pandas as pd
 
df = pd.DataFrame([[“A”, 1], [“B”, 2], [“A”, 3], [“D”, 4]],
                  columns=[“col_A”, “col_B”])
 
# 아래의 출력 결과를 얻고자 한다면?
“””
col_Acol_B
0 A 1
1 B 2
2 D 4
“””

여기에서는 주어진 열에서 GroupBy를 사용하고 아래와 같이 첫 번째 행을 얻습니다.

df.groupby(“col_A”).first()

  col_B
col_A  
A 1
B 2
D 4


Pandas실습16. Pandas Merge에서 각 행의 소스 식별

다음으로 아래처럼 두 개의 DataFrame이 있다고 가정합니다. 원본 DataFrame의 행 소스를 나타내는 열이 출력에 포함되도록 이들을 결합하는 것입니다.

import pandas as pd
 
df1 = pd.DataFrame([[“A”, 1], [“B”, 2]],
                  columns=[“col_A”, “col_B”])
 
df2 = pd.DataFrame([[“A”, 3], [“C”, 4]],
                  columns=[“col_A”, “col_C”])
 
# 아래의 출력 결과를 얻고자 한다면?
“””
col_Acol_Bcol_C_merge
0 A 1 3.0 both
1 B 2 NaN left_only
“””

해결방안
아래와 같이 merge를 사용하고 색인(indicator) 인수를 True로 전달할 수 있습니다.

df = pd.merge(df1, df2, how = “left”, indicator = True)
df

  col_A col_B col_C _merge
0 A 1 3.0 both
1 B 2 NaN left_only


Pandas실습17. DataFrame에서 n-최대 및 n-최소 값 필터링

아래와 같은 DataFrame을 생성하겠습니다. col_B의 값이 열의 상위 k 항목에 속하는 전체 행을 가져오는 것입니다.

import pandas as pd
 
df = pd.DataFrame([[“A”, 200], [“B”, 400], [“C”, 100], [“D”, 300]],
                  columns=[“col_A”, “col_B”])
 
k = 2
 
# 아래의 출력 결과를 얻고자 한다면?
“””
col_Acol_B
1 B 400
3 D 300
“””

해결방안
nlargest 메서드를 사용하고 지정된 열에서 필요한 상위 값의 수를 전달할 수 있습니다.

new_df = df.nlargest(n=k, columns=”col_B”)
new_df

  col_A col_B
1 B 400
3 D 300

위의 방법과 유사하게 nsmallest를 사용하여 열에서 가장 작은 k개의 값을 가져올 수 있습니다.


Pandas실습18. 범주형 데이터를 고유한 정수 값에 매핑

다음으로 DataFrame이 주어지면 열의 모든 고유 항목을 고유한 정수 식별자에 매핑해야 합니다.

import pandas as pd
 
df = pd.DataFrame([[“A”, 1], [“B”, 2],
                   [“A”, 3], [“D”, 4]],
                  columns=[“col_A”, “col_B”])
 
# 아래의 출력 결과를 얻고자 한다면?
“””
col_Acol_Bnew_col
0 A 1 0
1 B 2 1
2 A 3 0
3 D 4 2
“””

pd.factorize 메서드를 사용하여 주어진 열의 정수 기반 인코딩을 나타내는 새 Series를 생성할 수 있습니다.

df[“new_col”] = pd.factorize(df.col_A)[0]
df

  col_A col_B new_col
0 A 1 0
1 B 2 1
2 A 3 0
3 D 4 2


Pandas실습19. 모든 열 이름에 접두어 추가

이전 작업과 마찬가지로 동일한 DataFrame을 이용하겠습니다. 모든 열의 이름을 바꾸고 “pre_”를 접두사로 추가해 보겠습니다.

import pandas as pd
 
df = pd.DataFrame([[“A”, 1], [“B”, 2], [“C”, 3], [“D”, 4]],
                  columns=[“col_A”, “col_B”])
 
# 아래의 출력 결과를 얻고자 한다면?
“””
pre_col_Apre_col_B
0 A 1
1 B 2
2 C 3
3 D 4
“””
 

여기에서 add_prefix 메서드를 사용하고 아래와 같이 모든 열 이름에 접두사로 원하는 문자열을 전달할 수 있습니다.

df.add_prefix(“pre_”)

  pre_col_A pre_col_B
0 A 1
1 B 2
2 C 3
3 D 4


Pandas실습20. 범주 열을 하나의 핫 값으로 변환

마지막으로 DataFrame에 범주형 열을 생성하여 실습해 보겠습니다.

import pandas as pd
 
df = pd.DataFrame([[“A”], [“B”], [“C”], [“A”]],
                  columns=[“col_A”])
 
# 아래의 출력 결과를 얻고자 한다면?
“””
   A B C
0  1 0 0
1  0 1 0
2  0 0 1
3  1 0 0
“””
 

해결방안
여기에서 get_dummies 메서드를 사용하고 아래와 같이 시리즈를 인수로 전달할 수 있습니다.

new_df = pd.get_dummies(df.col_A)
new_df

 ABC
0100
1010
2001
3100

이것으로 Pandas실습을 마칩니다. 이를 기반으로 해서 더욱 복잡하고 어려운 데이터를 처리하고 분석하는 데에 도움이 되기를 바랍니다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다