KT AIVLE SCHOOL 복습
KT AIVLE DX #2 - 데이터 다듬기(2) 데이터프레임 생성
전쏘스
2023. 3. 11. 16:22
1. 데이터프레임 이해
1) 데이터프레임이란
- pandas 사용 목적이 데이터 프레임을 사용하기 위한 목적으로 봐도 무관
- 데이터를 처리, 조회 분석하는 가장 효율적인 방법
- 테이블, 엑셀 형태
- 직접 데이터 테이블을 만들 수 있으나, 보통 csv파일, 엑셀 파일, DB에서 읽어옴
2) 데이터프레임 형태
- 데이터 프레임은 인덱스(행 이름)와 열 이름이 있고 없고에 따라 다른 형태
- 인덱스란 특정 행을 조회할 때, 열 이름은 특정 열을 조회할 때 사용
a. 인덱스와 열 이름이 없는 형태 (실무에서는 자주 볼 수 없음)

b. 열 이름을 지정한 형태(가장 자주 보는 형태)

c. 인덱스와 열 이름을 지정한 형태

2. 데이터프레임 직접 만들기
- 대부분 리스트, 딕셔너리, Numpy 배열로 데이터프레임을 만듦
pd.DataFrame()
을 이용해 직접 만들 수 있음
df.head()
를 사용하면 만들어진 데이터프레임을 확인 할 수 있음
1) 빈 데이터 프레임 만들기
# 라이브러리 불러오기
import pandas as pd
import numpy as np
df = pd.DataFrame()
2) 리스트로 만들기
# 1차원 리스트 만들기
stock = [94500, 92100, 92200, 92300]
# 데이터프레임 만들기
df = pd.DataFrame(stock)
df.head()
# 2차원 리스트 만들기
stock = [[94500, 92100, 92200, 92300],
[96500, 93200, 95900, 94300],
[93400, 91900, 93400, 92100],
[94200, 92100, 94100, 92400],
[94500, 92500, 94300, 92600]]
# 데이터프레임 만들기
df = pd.DataFrame(stock)
# 확인
df.head()

# 리스트 만들기
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, columns=names, index=dates)
# 확인
df.head()

3) 딕셔너리로 만들기
- 딕셔너리로 데이터프레임을 만들면 딕셔너리의 키가 열 이름이 된다
# 딕셔너리 만들기
my_dict = {'Name': ['Gildong', 'Sarang', 'Jiemae', 'Yeoin'],
'Level': ['Gold', 'Bronze', 'Silver', 'Gold'],
'Score': [56000, 23000, 44000, 52000]}
# 데이터프레임 만들기
df = pd.DataFrame(my_dict)
# 확인
df.head()

3. CSV 파일 읽어오기
- 분석용 데이터는 대부분 파일에서 읽어옴
pd.read_csv(데이터 가져올 경로)
함수로 데이터를 읽어옴- 주요 옵션 -
sep
: 구분자 지정 (기본값 = , ) -header
: 헤더가 될 행 번호 지정 (기본값 = 0) -index_col
: 인덱스 열 지정 (기본값 = False) -names
: 열 이름으로 사용할 문자열 리스트 -encoding
: 인코딩 방식을 지정 → 한글포함 파일은encoding = 'CP949'
지정 필수!
- 주요 옵션 -
4. 인덱스 다시 설정
- 일반 열을 인덱스 열로 설정하거나, 정수값 인덱스로 초기화 가능
index_col
: 파일을 불러 올 때, 인덱스가 될 열을 선택
set_index(인덱스가 될 열)
: 파일을 불러온 후에 인덱스가 될 열을 설정
reset_index()
: 행 번호에 기반한 정수 값으로 인덱스 초기화 →drop=True
를 설정하면 기존 인덱스 열을 일반 열로 가져오지 않고 버림 (기본값 = False)
inplace=True
옵션을 이용해 데이터프레임에 바로 적용될 수 있도록 함
# 기존 열 중 하나를 인덱스로 설정
df = df.set_index('column')
# 인덱스 이름 삭제
df.index.name = None
# 인덱스 초기화
df.reset_index(drop=False, inplace=True)
# 기존 인덱스를 제거하지 않으면 컬럼명이 index가 되니 변경
df.rename(columns={'index':'column'}, inplace=True)