본문 바로가기

코딩

[Python] Pandas 라이브러리

1. Pandas

Pandas 라이브러리는 시리즈와 데이터프레임(DataFrame)을 다룬다.

데이터프레임은 표 형태를, 시리즈는 한 열(column)만 있는 형태를 생각하면 된다.

데이터프레임과 시리즈는 인덱스와 값으로 이루어지는데 이때 인덱스는 row명을 의미한다.

아래 작성된 예시들에서 "col"은 column명을 가리키고 "row"는 row명을 가리킨다.

 

일단 import를 하자.

import pandas as pd

 

 

2. DataFrame 만들기 / csv로 저장하기

내용 코드
csv 파일을 읽어 DF 만들기 df = pd.read_csv("파일명")
딕셔너리를 DF로 만들기 df = pd.DataFrame(딕셔너리명)
데이터를 직접 넣어 DF 만들기 df = pd.DataFrame([1,3,5], [2,12,24])   #(row1, row2)
DF를 csv 파일로 저장하기
*index = False 하면 인덱스는 추가 안 됨
df.to_csv("파일명")

 

 

3. DataFrame 데이터 확인하기

내용 코드
전체 정보 개요 (타입, 값 개수) df.info()
위부터 #줄 df.head(#)
아래부터 #줄 df.tail(#)
cols 이름 df.columns
특정 col (시리즈 형태) df["col1"]
특정 col (DF 형태) df[["col1"]]
특정 cols (DF 형태) df[["col1"], ["col2"], ...]
특정 row (시리즈 형태) df.loc["row1"]
특정 row (DF 형태) df.loc[["row1"]]
특정 rows (DF 형태) df.loc[["row1", "row2"]]
특정 rows, cols df.loc[["row1","row,3"], "col1"]
특정 rows, cols (인덱싱 수)***** df.iloc[[1, 3], [2:6]]
조건에 맞는 rows
*논리연산자 : & (and)   | (or)   ~ (not)
df[df["col2" > 1000]]
col 기준으로 오름차순 df.sort_values("col1")
col 기준으로 내림차순 df.sort_values("col1", ascending=False)

 

 

4. DataFrame 타입 변경하기 / 통계 확인하기

내용 코드
col에 있는 유니크한 값 개수 df["col1"].value_counts()
col의 타입 변환 df["col1"] = df["col1"].astype(타입)
col을 숫자 타입으로 변환 df["col1"] = pd.to_numeric(df["col1"])
모든 col 전체 평균 df.mean()
특정 col 전체 평균 df["col1"].mean()
그룹화한 값에 대한 col의 평균 df.groupby(["col1", "col3"])["col6"].mean()
숫자 타입 col들의 각 통계수치 df.describe()
col을 날짜 타입으로 변환 df["col1"] = pd.to_datetime(df["col1"])
날짜 타입 col1의 연도를 별도 col2로 생성 df["col2"] = df["col1"].dt.year

 

 

4. DataFrame 데이터 수정하기

내용 코드
새로운 col 추가하기 (비어있음) df["new_col"] = ''
새로운 col 추가하기 (다른 열 이용) df["new_col"] = df["col1"] * 5
col 값들 일괄 변경하기 df["col1"] = "a"
df["col1"] = df["col1"] + 300
col 값들 일괄 변경하기 (함수 이용) df["col1"] = df["col1"].apply(함수명)
col의 특정 값을 특정 값으로 변경하기 (딕셔너리 이용)
*key와 같은 값을 value로 바꿈
df["col1"] = df["col1"].map(딕셔너리)

 

 

5. DataFrame 데이터 정제하기

내용 코드
특정 col/row 삭제
*axis=1은 col 삭제
df = df.drop("col/row", axis=1/0)
결측치 탐색 print(df.isnull().sum())
결측치에 값 채우기 df = df.fillna(채울 값)
df["col"] = df["col"].fillna(채울 값)
결측치 있는 row 삭제
*ignore_index = True 이면 인덱스 초기화
df = df.dropna()
df = df.dropna(subset="col", ignore_index=True)
열 이름 바꾸기 df = df.rename(columns={"기존col" : "새col"}
인덱스 재지정 df = df.reset_index()

 

 

6. DataFrame끼리 병합하기

내용 코드
위 아래로 붙이기
*inner는 교집합, outer은 합집합
pd.concat([df_1, df_2], axis=0, join="inner", ignore_index=True)
옆에 붙이기
*inner는 교집합, outer은 합집합
pd.concat([df_1, df_2], axis=1, join="outer", ignore_index=True)
특정 col 기준으로 합치기 pdf.merge(df_1, df_2, on="col", how="inner")
*how= "inner" 또는 "outer" 또는 "left" 또는 "right"