공부방/Upstage AI Lab 4기

7/9 학습일지 | 파이썬 판다스 Fancy Indexing, 피벗테이블

Eddie_D 2024. 7. 9. 19:05

판다스에서는 사용할 수 있는 데이터 타입이 2가지 정도다. 시리즈와 데이터프레임(기본).

# 데이터 분석 라이브러리 4종 세트! 
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

데이터프레임 안에서 원하는 값 찾기

전체 데이터에서 원하는 데이터를 찾는 방법! 지금부터 이런 데이터프레임이 있다고 가정하고, 인덱싱하는 방법을 정리해보자. 

df = pd. DataFrame(data=np.arange(1, 49).reshape(12, 4),
                   columns=["x1", "x2", "x3", "x4"])
df
  x1 x2 x3 x4
0 1 2 3 4
1 5 6 7 8
2 9 10 11 12
3 13 14 15 16
4 17 18 19 20
5 21 22 23 24
6 25 26 27 28
7 29 30 31 32
8 33 34 35 36
9 37 38 39 40
10 41 42 43 44
11 45 46 47 48

원하는 칼럼의 값을 뽑을 때 df["칼럼명"]
예를 들어 df["x1"]을 하면 row의 인덱스값과 함께 x1의 값들이 모두 뽑혀나온다. 

원하는 row에 해당하는 모든 칼럼들의 값을 뽑을 때 df[n:m] 
df[0:3]을 하면 row를 기준으로 0, 1, 2 세 개의 row의 각 x1, x2, x3, x4의 값을 뽑을 수 있다.

.loc를 이용하면 원하는 row의 인덱스값을 직접 써서 각 칼럼의 값도 뽑을 수 있다. 2차원도 가능.
df.loc[1]  -> 1 row에 해당하는 값들.
df.loc[0:4, "x1":"x2"] -> 0, 1, 2, 3, 4를 갖는 인덱스 row 에서 x1, x2 값만 뽑기
더 복잡한 필터를 주고 싶으면 mask를 써준다. 
예를 들어 이런 조건을 만족하는 마스크를 만들고 mask = df["x1"] > 10
df.loc[mask]를 하면 조건에 맞는 값들만 나온다. 

.iloc는 인덱스 안에 값과는 무관하게 그 순서(위치)에 맞는 숫자를 써서 인덱싱을 할 수 있다.
df.iloc[2:8, 0:3] -> 3번째 행부터 7번째 행까지, 0열(x1)부터 2번째 행까지(x3)까지의 값이 나온다.

loc와 iloc 차이점

기반 라벨 (Label) 정수 인덱스 (Integer Index)
인덱싱 방식 라벨을 사용한 인덱싱 0 기반 인덱스를 사용한 인덱싱
사용 방법 df.loc[row_label, col_label] df.iloc[row_index, col_index]
직관성 라벨을 사용하여 직관적 정수 인덱스를 사용하여 수학적
범위 지정 시작과 끝 라벨을 포함 시작과 끝 인덱스를 포함하지 않음
사용 예제 df.loc[['a', 'c'], ['A', 'C']] df.iloc[[0, 2], [0, 2]]
기능 특정 라벨을 사용하여 데이터 선택 특정 위치를 사용하여 데이터 선택

예제의 행번호가 숫자라서 좀 헷갈리는데 알파벳으로 생각하면 쉬움..

만약 어떤 csv 파일을 읽고 싶다? (예제에서는 타이타닉.csv 파일을 불러옴)
titanic = pd.read_csv("경로")를 하면 된다. 이때 경로에 ./을 하면 현재 디렉토리라는 뜻이 됨. 그리고 불러온 csv 파일에 대해 대충 파악하고 싶다면 이름.info(),  이름.describe()를 해보자.

피벗테이블 쓰는 방법

csv파일 안에 여러가지 데이터들이 들어가 있다고 하고, 그 안에서 특정 데이터를 기준으로 요약하고 싶을 때, 피벗테이브를 쓴다.

기본적으로 pd.pivor_table 이라는 함수를 사용하고, 그 안에 요약할 내용을 집어넣는다. 
pivot_table = pd.pivot_table(df, values='Sales', index='Date', columns='Product', aggfunc='sum')
print(pivot_table)
피벗테이블의 행 인덱스에 사용할 컬럼(index=' '), 데이터의 컬럼(values = ' '), aggfunc은 데이터를 집계하는 함수를 지정하는 매개변수다. aggfunc에는 아래와 같은 것들이 있다. 

sum 합계를 계산합니다.
mean 평균을 계산합니다.
count 데이터의 개수를 셉니다.
min 최소값을 계산합니다.
max 최대값을 계산합니다.
median 중앙값을 계산합니다.
std 표준 편차를 계산합니다.
var 분산을 계산합니다.