7/9 학습일지 | 파이썬 판다스 Fancy Indexing, 피벗테이블
판다스에서는 사용할 수 있는 데이터 타입이 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 | 분산을 계산합니다. |