상세 컨텐츠

본문 제목

[Pandas] 판다스 데이터프레임(DataFrame)

AI

by 래모 2023. 9. 20. 20:42

본문

본 게시물은 유튜브 파이스탁님의 파이썬 판다스 기초 강의를 들으며 작성하였습니다

 

DataFrame

:2차원 데이터를 효과적으로 표현한 판다스 자료구조

 

DataFrame으로 데이터를 표현하는 방식은 컬럼(열)단위로 표현하는 방법과 로우(행)단위로 표현하는 방법이 있음

 

1. 컬럼단위

컬럼명을 딕셔너리의 key로 데이터는 딕셔너리의 values로 사용!

from pandas import DataFrame

data = {
    "종가":[157000,51300,68800,140000],
    "PER":[39.88,8.52,10.03,228.38],
    "PBR":[4.38,1.45,0.87,2.16]
}

index = ["NAVER", "삼성전자", "LG전자", "카카오"]
df = DataFrame(data, index)
print(df)
'''
           종가     PER   PBR
NAVER  157000   39.88  4.38
삼성전자    51300    8.52  1.45
LG전자    68800   10.03  0.87
카카오    140000  228.38  2.16
'''

 

2. 로우단위

data, index, cloumns를 각각 리스트로 표현

from pandas import DataFrame

data = [
    [157000,39.88,4.38],
    [51300,8.52,1.45],
    [68800,10.03,0.87],
    [140000,228.38,2.16]
]
index = ["NAVER", "삼성전자", "LG전자", "카카오"]
columns = ["종가", "Per", "PBR"] # label
df = DataFrame(data,index,columns)
print(df)
'''
           종가     Per   PBR
NAVER  157000   39.88  4.38
삼성전자    51300    8.52  1.45
LG전자    68800   10.03  0.87
카카오    140000  228.38  2.16
'''

 

DataFrame 인덱싱과 슬라이싱

 

인덱싱

1. 컬럼 선택

대괄호['컬럼명']을 통해서 단일 컬 선택 가능

 

두개 이상의 컬럼을 가져오고 싶으면 다음의 구조로 가져오면 됨

df[['컬럼명1', '컬럼명2']]

 

2. 로우 선택

로우를 선택할 때는 iloc나 loc속성 사용

기능
loc 인덱스를 사용해서 로우 선택
iloc 행번호를 사용해서 로우 선택

 

두개 이상의 열을 가져오고 싶으면 다음의 구조로 가져오면 됨

df.iloc[[0,1]]
df.loc[["인덱스1","인덱스2"]]

 

슬라이싱

1. 로우 슬라이싱

iloc.loc속성을 사용하여 슬라이싱

행번호로 가져올 땐 3 그 전까지 가져오고 인덱스로 가져올 땐 LG전자 까지 가져옴!!

 

 

DataFrame에서 특정 값 가져오기

행과 열을 모두 써주면 됨

df.iloc[행번호, 열번호]
df.loc[인덱스, 컬럼명]

 

DataFrame에서 특정 영역 가져오기

df.iloc[행번호 리스트, 열번호 리스트]
df.loc[인덱스 리스트, 컬럼명 리스트]

 

DataFrame 추가 및 삭제

컬럼추가

예시를 위해 업비트API를 이용

더보기

pyupbit 모듈이란, 업비트 API를 파이썬에서 쉽게 사용하기 위해서 저자들이 개발한 모듈이다.

굳이 API를 호출할 필요 없이 pyupbit 모듈을 이용하면 간편한 경우가 많다. 

import pyupbit
df = pyupbit.get_ohlcv("KRW-BTC")
df.head()

위 사진처럼 직접 인덱스 값을 넣고 원하고자 하는 데이터를 활용하면 됨

 

컬럼 삭제

df.drop('컬럼명', axis=1)
# axis = 1은 컬럼 axis=0은 row

원본은 그대로 유지되고 컬럼이 삭제된 새로운 데이터프레임 객체가 리턴

 

 

더보기

시계열 데이터

일정 시간 간격으로 측정되거나 기록된 데이터로, 예를 들어 주식 가격, 날씨 정보, 경제 지표, 센서 데이터 등을 포함할 수 있습니다.

date = ["2023-09-20", "2023-09-21"]
index = pd.to_datetime(date)
index
#DatetimeIndex(['2023-09-20', '2023-09-21'], dtype='datetime64[ns]', freq=None)

 

 

로우 추가

loc속성 사용

df.loc[인덱스] = 데이터

 

로우 삭제

df.drop(로우 인덱스, axis=0)

이것도 원본은 유지되고 삭제된 객체 리턴

 

위에 추가했던거 삭제해보겠음

 

 

DataFrame 필터링

비교 연산자의 결과는 Boolean 값을 갖고 있는 시리즈 객체임

 

컬럼 시프트

데이터프레임의 연산은 기본적으로 같은 인덱스에 있는 컬럼과 컬럼 사이에 적용

같은 열끼리의 값을 빼고 싶을땐 어떻게 해야하나? => 새로운 열 추가

df['컬럼명'].shift(1)

 

https://wikidocs.net/book/3488

관련글 더보기