Pandas는 데이터 분석 시 매우 자주 사용하는 라이브러리 중 하나로 Pandas실습 형태로 2차에 걸쳐 포스팅을 작성하였습니다. 이번 포스팅을 보시기 전에 이전 학습이 선행되어야 합니다. Pandas실습1 을 학습하지 않으셨다면, 아래 링크를 참고하셔서 먼저 학습을 진행해야 합니다.
Pandas실습 Part1
연습 삼아 질문을 직접 해 본 다음 제가 제시한 방법을 살펴보겠습니다.
Pandas실습 – Part2
Pandas실습 – Part2 11. DataFrame의 컬럼 누적합
예시 데이터를 아래와 같은 DataFrame으로 생성하겠습니다. 열의 누적 합계를 나타내는 적분 열에서 새 열을 생성하는 것입니다.
해결방안
여기에서 주어진 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
해결방안
여기서 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에 새 행으로 추가되어야 하는 리스트를 하나 생성하겠습니다.
해결방안
여기에서 아래와 같이 loc을 사용하고 새 행을 DataFrame의 새 인덱스에 할당할 수 있습니다.
df.loc[df.shape[0]] = new_row
df
col_A | col_B | |
---|---|---|
0 | A | 1 |
1 | B | 2 |
2 | C | 3 |
3 | D | 4 |
4 | E | 5 |
Pandas실습15. 열에 있는 모든 고유 값의 첫 번째 행 가져오기
DataFrame이 주어지면 작업은 col_A 열의 모든 고유 요소가 처음 나타나는 전체 행을 가져오는 것입니다.
여기에서는 주어진 열에서 GroupBy를 사용하고 아래와 같이 첫 번째 행을 얻습니다.
df.groupby(“col_A”).first()
col_B | |
---|---|
col_A | |
A | 1 |
B | 2 |
D | 4 |
Pandas실습16. Pandas Merge에서 각 행의 소스 식별
다음으로 아래처럼 두 개의 DataFrame이 있다고 가정합니다. 원본 DataFrame의 행 소스를 나타내는 열이 출력에 포함되도록 이들을 결합하는 것입니다.
해결방안
아래와 같이 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 항목에 속하는 전체 행을 가져오는 것입니다.
해결방안
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이 주어지면 열의 모든 고유 항목을 고유한 정수 식별자에 매핑해야 합니다.
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_”를 접두사로 추가해 보겠습니다.
여기에서 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에 범주형 열을 생성하여 실습해 보겠습니다.
해결방안
여기에서 get_dummies 메서드를 사용하고 아래와 같이 시리즈를 인수로 전달할 수 있습니다.
new_df = pd.get_dummies(df.col_A)
new_df
A | B | C | |
---|---|---|---|
0 | 1 | 0 | 0 |
1 | 0 | 1 | 0 |
2 | 0 | 0 | 1 |
3 | 1 | 0 | 0 |
이것으로 Pandas실습을 마칩니다. 이를 기반으로 해서 더욱 복잡하고 어려운 데이터를 처리하고 분석하는 데에 도움이 되기를 바랍니다.