[데이터사이언스] pandas 기초&데이터 읽고 다듬기

홍랑·2021년 10월 7일
0

DataScience

목록 보기
1/5
using Python - anaconda & jupyter notebook

📌 Pandas 기초


Pandas (Python Data Analysis Library) (a.k.a. 스테로이드 맞은 엑셀)
👉 데이터 조작 및 분석을 위해 Python 프로그래밍 언어로 작성된 소프트웨어 라이브러리
👉 R 만큼의 강력한 데이터 핸들링 성능을 제공하는 모듈

import pandas as pd
import numpy as np
numpy 는 다차원 배열 같은 데이터 구조 외에도 수치 계산을 위한 기능을 제공하는 라이브러리

📚 Series

  • index, value
  • only 한 가지 데이터 타입
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  # 정상실행

📚 DataFrame

  • index, value, column
  • Series가 여러개 합쳐진 자료형
# 날짜 데이터 생성
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"]
})
위 경우에는 column이 쌓이는 형태라면,
ex)
key
0k0
1k4
2k2
3k3
# 리스트 안의 딕셔너리 형태로 데이터 만들기
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"}
})
위는 row가 쌓이는 형태가 된다.
ex)
keyCD
0k0C0D0


📚 Data 다듬기

데이터 정렬

# 특정 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"]
  • loc
    - index 이름으로 특정 행, 열 선택
  • iloc
    - 컴퓨터가 인식하는 인덱스 값으로 선택
# 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]

column 추가

  • 기존 컬럼이 없으면 추가
  • 기존 컬럼이 있으면 변경
df["E"] = ["one","two","three","four","four","seven"]

# 특정 값 유무 확인
df.isin(["four"])

특정 column 제거

del df["E"]

# axis=0 가로(default),  axis=1 세로
df.drop("D", axis=1)
df.drop(["20211009"])

columns, index 변경

  • rename(): column명 변경
# 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
)
  • set_index(): 선택한 컬럼을 데이터 프레임의 인덱스로 지정
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")

DataFrame 병합

  • pd.merge() 활용
    - 두 데이터 프레임에서 컬럼이나 인덱스를 기준으로 잡고 병합
    - key: 기준 컬럼이나 인덱스
    • 기준 key는 두 데이터 프레임에 모두 포함
# 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 형태이다.

👉 읽어들인 후 head(), tail()로 파악
👉 데이터 다듬어 원하는 Data 만듦


📌 데이터 저장


모두 다듬은 데이터를 원하는 타입의 파일로 저장할 수 있다.
csv 파일로 저장한다면 아래와 같이 할 수 있다.

data.to_csv("파일경로/파일명")
profile
호랑이 기운이 솟아나요🐯

0개의 댓글