본문 바로가기
파이썬/데이터 다듬기

[240912] 데이터 다듬기 #2 판다스 데이터프레임 생성

by 황오독 2024. 9. 12.

데이터프레임이란?

 - Pandas 사용 목적이 데이터프레임을 사용하기 위함.

 - 보통 csv, 엑셀 파일 또는 DB에서 읽어 옴.

 

1. 데이터 프레임

   (1) 라이브러리 불러오기 (**라이브러리 숙지 필수)

import pandas as pd
import numpy as np
import matplotlib.pyplot as alt
import seaborn as sns

# matplotlib.pyplot과 seaborn 모두 시각화를 위한 라이브러리로,
# matplotlib.pyplot은 classical 하지만 손이 많이 가고 (수동),
# seaborn은 다루기 좀 더 쉬운 느낌이다. (자동)

 

  (2) 리스트로 데이터프레임 만들기

stock = [[94500, 92100, 92200, 92300],
         [96500, 93200, 95900, 94300],
         [93400, 91900, 93400, 92100],
         [94200, 92100, 94100, 92400],
         [94500, 92500, 94300, 92600]]
dates = ['2019-02-15', '2019-02-16', '2019-02-17', '2019-02-18', '2019-02-19']
names = ['High', 'Low', 'Open', 'Close']

df = pd.DataFrame(stock, dates, names)
# data=stock,index=dates, columns=names

df.head() # head(n)을 작성하면 상위 n번째까지 보여주며,
	      # 아무것도 안넣을 경우, 디폴트는 5이다. (상위 5개)
            

# 필요하면 인덱스를 별도로 지정할 수 있다.

# 딕셔너리 만들기  (Keys, Values)
cust = {'Name': ['Gildong', 'Sarang', 'Jiemae', 'Yeoin'],
        'Level': ['Gold', 'Bronze', 'Silver', 'Gold'],
        'Score': [56000, 23000, 44000, 52000]}

# 데이터프레임 만들기(인덱스 지정함)
df = pd.DataFrame(cust, index=['C01', 'C02', 'C03', 'C04'])

# 확인

 

2. CSV 파일 읽어오기 read_csv()

더보기

[주요옵션]
- sep: 구분자 지정(기본값 = 콤마)
- header: 헤더가 될 행 번호 지정(기본값 = 0)
- index_col: 인덱스 열 지정(기본값 = False)
- names: 열 이름으로 사용할 문자열 리스트
- encoding: 인코딩 방식을 지정

 

※ 참고

한글이 포함된 파일을 읽을 때 다음과 같은 encoding 오류가 발생하면 encoding='CP949'로 지정
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xb1 in position 0: invalid start byte

# 데이터 읽어오기
path = '경로, 혹은 디렉토리'
pop = pd.read_csv(path)

# 상위 10행만 확인
pop.head(10)

3. 인덱스 설정

# 기존 열 중 하나를 인덱스로 설정(1)
pop.set_index('year')
pop.head()

# pop = pop.set_index('year') 처럼 반환한 값을 pop에 반영하지 않아서, 실제 데이터프레임에 반영되진 않음.

# 기존 열 중 하나를 인덱스로 설정(2)
pop = pop.set_index('year')
pop.set_index('year', inplace=True)
# 인덱스 이름 삭제
pop.index.name = None

# 인덱스 초기화
pop.reset_index()

# 여기서 reset_index(drop=False)가 디폴트값으로,
# reset_index(drop=False)는 해당 열을 일반열로 가져오지만,
# reset_index(drop=True)는 해당 열을 버린다.

# 열 이름 변경
pop = pop.rename(columns={'index':'year'})