판다스(Pandas) 데이터프레임(DataFrame) 이해하기

파이썬을 활용하여 금융 데이터를 분석하려면, 판다스(Pandas) 라이브러리와 데이터프레임(DataFrame)은 기본적으로 알고 있어야 합니다. 판다스는 데이터 분석을 위해 가장 많이 사용하는 대표적인 데이터 분석을 위한 라이브러리입니다. 데이터프레임은 2차원(행,열)으로 이루어진 이질적인 데이터 형식을 가지는 표 형식의 크기 변경이 가능한 데이터입니다. 이질적인 데이터 형식의 의미는 다른 데이터 유형을 의미합니다. 즉, 연속형 데이터와 범주형 데이터가 포함되어 있을 수 있고, bool 형 변수가 포함되어 있을 수 있습니다. 공공데이터포털 금융회사 기본정보 불러오기 포스팅에서 알려 드린 방법으로 추출한 데이터 형식이 전형적인 데이터프레임 형태입니다. 이번 포스팅에서는 금융 데이터 분석의 기본이라 할 수 있는 판다스 라이브러리의 데이터프레임 구조에 대해서 알아 보겠습니다.

pandas.DataFrame 구조

데이터 구조에는 라벨이 지정된 축(행 및 열)도 포함됩니다. 산술 연산은 행과 열 모두에 적용할 수 있습니다. 아래는 기본 판다스 데이터프레임의 구조입니다.


pandas.DataFrame(data=Noneindex=Nonecolumns=Nonedtype=Nonecopy=None)


데이터프레임을 구성하는 인수(parameter)에 대해서 설명 하겠습니다.


data : ndarray (structured or homogeneous), Iterable, dict, or DataFrame

  • Dict는 시리즈(Series), 배열(array), 상수(constant), 데이터 클래스(data class) 또는 리스트(list)와 같은 객체(object)를 포함할 수 있습니다. 데이터가 dict(dictionary)인 경우 열 순서는 딕셔너리에 정의된 key 순서를 따릅니다. dict에 인덱스가 정의된 시리즈가 포함되어 있으면 해당 인덱스에 따라 정렬됩니다. 이 정렬은 데이터가 Series이거나 DataFrame 자체인 경우에도 발생합니다. 정렬은 Series/DataFrame 입력 단계에서 수행됩니다.


index : Index or array-like

  • 결과 데이터프레임에 사용할 인덱스입니다. 입력 데이터의 인덱싱 정보가 없고, 인덱스가 제공되지 않은 경우에는 기본적으로 RangeIndex(0,1,2,…)가 자동 부여됩니다.


columns : Index or array-like

  • 데이터에 열 라벨이 없을 때 결과 프레임에 사용할 열 레이블을 지정하며, 기본값은 RangeIndex(0, 1, 2, …, )입니다. 데이터에 열 레이블이 포함된 경우, columns 인수에 있는 열 이름으로 업데이트 됩니다.


dtype : dtype, default None

  • 적용할 데이터 유형을 나타냅니다. 단일 dtype만 허용됩니다. 없는 경우 자동 추론하여 생성합니다.


copy : bool or None, default None

  • input에서 데이터를 복사합니다. dict 데이터의 경우 기본값은 copy=True처럼 작동합니다. 데이터프레임 또는 2d ndarray(2차원 배열) input의 경우 기본값은 copy=False로 동작합니다. 데이터가 하나 이상의 시리즈(dtype이 다를 수 있음)를 포함하는 dictionary인 경우 copy=False는 이러한 input이 복사되지 않도록 합니다.

pandas.DataFrame 생성 예시


딕셔너리로부터 데이터프레임 생성

# pandas 라이브러리 메모리에 로딩
import pandas as pd 

tempData = {'col1': [1, 2], 'col2': [3, 4]}
tempDataFrame = pd.DataFrame(data = tempData)
tempDataFrame
----------------------
	col1	col2
0	1	    3
1	2	    4

dtypes 함수를 사용하여 데이터 유형을 확인해 보겠습니다.

tempDataFrame.dtypes
----------------------
col1    int64
col2    int64
dtype: object

데이터 유형은 ‘int64’ 입니다. dtype 인수를 활용하여 두 개의 열 모두 데이터 형식을 ‘int8’ 로 생성해 보겠습니다.

import numpy as np

tempDataFrame1 = pd.DataFrame(data = tempData, dtype = np.int8)
tempDataFrame1
---------------------
	col1	col2
0	1	3
1	2	4 

결과 데이터프레임은 위의 tempDataFrame과 tempDataFrame1이 동일합니다. 데이터 유형을 비교해 보겠습니다.

tempDataFrame1.dtypes
--------------
col1    int8
col2    int8
dtype: object

결과 데이터프레임의 데이터 유형이 모두 ‘int8’로 생성되었습니다.


Series를 포함하는 딕셔너리로부터 데이터프레임 생성

tempData1 = {'col1': [0, 1, 2, 3], 'col2': pd.Series([2, 3], index=[2, 3])}
pd.DataFrame(data = tempData1 , index=[0, 1, 2, 3])
-----------------------
	col1	col2
0	0	    NaN
1	1	    NaN
2	2	    2.0
3	3	    3.0

딕셔너리 구조를 가지는 데이터 tempData를 생성하였습니다. ‘col1’은 0,1,2,3으로 이루어진 리스트 형태로 데이터를 입력하였고, ‘col2’는 2, 3의 값을 가지고, 각각에 해당하는 인덱스는 2와 3인 Series를 입력하였습니다. ‘col1’의 별도 인덱스를 지정하지 않았기 때문에, 기본값으로 0,1,2,3의 인덱스 값을 가지게 됩니다. 각각의 열의 인덱스에 해당하는 값들끼리 결합되어 데이터프레임이 생성되었습니다. ‘col2’는 0과 1의 인덱스를 가지는 값이 존재하지 않기 때문에, NaN(결측)값을 가지게 됩니다.


numpy ndarray로부터 데이터프레임 생성

import numpy as np

tempData2 = pd.DataFrame(np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]), columns=['a', 'b', 'c'])
tempData2 
---------------------------
	a	b	c
0	1	2	3
1	4	5	6
2	7	8	9


라벨이 지정된 열이 있는 numpy ndarray로부터 데이터프레임 생성

dataTemp3 = np.array([(1, 2, 3), (4, 5, 6), (7, 8, 9)], dtype=[("a", "i4"), ("b", "i4"), ("c", "i4")])
dataFrame3 = pd.DataFrame(data = dataTemp3 , columns=['c', 'a'])
dataFrame3 
--------------------
	c	a
0	3	1
1	6	4
2	9	7


데이터 클래스로부터 데이터프레임 생성

from dataclasses import make_dataclass
Point = make_dataclass("Point", [("x", int), ("y", int)])
pd.DataFrame([Point(0, 0), Point(0, 3), Point(2, 3)])
---------------------
	x	y
0	0	0
1	0	3
2	2	3


시리즈/데이터프레임으로부터 데이터프레임 생성

ser = pd.Series([1, 2, 3], index = ["a", "b", "c"])
dataFrame1 = pd.DataFrame(data = ser, index = ["a", "c"])
dataFrame1
--------------
	0
a	1
c	3
dataFrame1 = pd.DataFrame([1, 2, 3], index = ["a", "b", "c"], columns = ["x"])
dataFrame2 = pd.DataFrame(data = dataFrame1, index = ["a", "c"])
dataFrame2
-----------------
	x
a	1
c	3

이번 포스팅에서는 판다스 라이브러리의 데이터프레임의 구조 및 생성에 대해서 알아 보았습니다. 기본 분석 데이터 포맷은 데이터프레임입니다. 특히, 금융데이터는 차주(사람)별 금융정보를 관리하고, 이를 기반으로 분석을 수행하기 때문에 데이터프레임의 구조를 잘 이해하셔야만 분석하고자 하는 인사이트 도출을 자유롭게 수행하실 수 있습니다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다