Pandas (Python Data Analysis Library) (a.k.a. 스테로이드 맞은 엑셀)
👉 데이터 조작 및 분석을 위해 Python 프로그래밍 언어로 작성된 소프트웨어 라이브러리
👉 R 만큼의 강력한 데이터 핸들링 성능을 제공하는 모듈
import pandas as pd
import numpy as np
pd.Series([1, 2, 3, 4], dtype=np.float64)
pd.Series([1, 2, 3, 4], dtype=str)
pd.Series({"key":"value"}) # Series는 index와 value로 구성
data = pd.Series([1, 2, 3, 4, 5, 6, 7, "8"]) # 한 가지 데이터 타입으로만 구성되기 때문에 data의 타입은 object
data % 2 # 오류발생
data.astype(int) % 2 # 정상실행
# 날짜 데이터 생성
dates = pd.date_range("20211006", period=6)
# 표준정규분포에서 샘플링한 난수 생성
data = np.random.randn(6,4)
# DataFrame 데이터 생성
df = pd.DataFrame(data, index=dates, columns=["A", "B", "C", "D"])
# DataFrame 정보 탐색
df.head() # 가장 앞 5개 데이터 출력
df.tail() # 가장 뒤 5개 데이터 출력
# DataFrame 기본 구성 3요소
df.index # index 출력
df.columns # column명 출력
df.values # 전체 값 출력
# DataFrame 기본 정보 확인
df.info()
# 딕셔너리 안의 리스트 형태로 데이터 만들기
data = pd.DataFrame({
"key" : ["k0", "k4", "k2", "k3"],
"A" : ["A0", "A1", "A2", "A3"],
"B" : ["B0", "B1", "B2", "B3"]
})
key | |
---|---|
0 | k0 |
1 | k4 |
2 | k2 |
3 | k3 |
# 리스트 안의 딕셔너리 형태로 데이터 만들기
data = pd.DataFrame({
{"key":"k0","C":"C0", "D":"D0"},
{"key":"k1","C":"C1", "D":"D1"},
{"key":"k2","C":"C2", "D":"D2"},
{"key":"k3","C":"C3", "D":"D3"}
})
key | C | D | |
---|---|---|---|
0 | k0 | C0 | D0 |
# 특정 column(열) 기준으로
# ascending=True 오름차순, ascending=False 내림차순
df.sort_values(by=["B", "C"], ascending=False, inplace=True)
df.A #컬럼이 문자인 경우 가능
df.["A"]
df.[["A", "B"]] # 두 개 이상의 컬럼 선택 시 [] 추가
# offset index
df[0:3]
df["20211006":"20211009"]
# colum A, B 의 모든 행 출력
df.loc[:,["A","B"]]
# 해당 범위 값 0으로 변경
df.loc["20211006":"20211008", "A":"D"] = 0
df.iloc[3]
df.iloc[[1,2,4],[0,2]] # column 0, 2 의 1, 2, 4 행 출력
df.iloc[:, 1:3] # column 1, 2 의 모든 행 출력
# boolean 값으로 해당 column 조건 판단
df["A"] > 0
# DataFrame 전체 비교
df[df[:] > 0]
# True에 해당되는 행 반환
df[df["A"] > 0]
df["E"] = ["one","two","three","four","four","seven"]
# 특정 값 유무 확인
df.isin(["four"])
del df["E"]
# axis=0 가로(default), axis=1 세로
df.drop("D", axis=1)
df.drop(["20211009"])
# inplace=True: 해당 변화 즉시 DataFrame에 반영
# 특정 컬럼명 변경
data.rename(columns={data.columns[0]:"new name"}, inplace=True)
# 여러개의 컬럼명 변경
data.rename(
columns={
"A":"new1",
data.columns[1]:"new2",
data.columns[2]:"new3",
data.columns[3]:"new4",
data.columns[4]:"new5"
}, inplace=True
)
data.set_index("column", inplace=True)
df["A"].apply("min")
df.apply(np.sum)
# def: 함수 선언
def plusminus(num):
return "plus" if num > 0 else "minus"
df["A"].apply(plusminus)
# lambda식으로 함수 대체
df["A"].apply(lambda num: "plus" if num > 0 else "minus")
# data1 의 key column 값 기준으로 병합
pd.merge(data1, data2, how="left", on="key")
# data2 의 key column 값 기준으로 병합
pd.merge(data1, data2, how="right", on="key")
# data1 과 data2 의 공통 key column 값 기준으로 병합
pd.merge(data1, data2, how="inner", on="key")
# data1 과 data2 의 모든 key column 값 기준으로 병합
pd.merge(data1, data2, how="outer", on="key")
pandas 라이브러리의 'read_~' 함수를 사용해 불러온다.
import pandas as pd
# csv 파일 불러옴
data = pd.read_csv("파일경로/파일명")
# excel 파일 불러옴
# 파일명 뒤에 옵션을 넣어 필요한 데이터만 가져올 수 있음
data = pd.read_excel("파일경로/파일명", header=2, usecols="B, D, G, J, N")
이때 data 변수에 들어간 데이터는 DataFrame 형태이다.
모두 다듬은 데이터를 원하는 타입의 파일로 저장할 수 있다.
csv 파일로 저장한다면 아래와 같이 할 수 있다.
data.to_csv("파일경로/파일명")