본문 바로가기
파이썬/판다스

Pandas - DataFrame 기초

by 행복론자 2019. 11. 24.

DataFrame은 Series와 함께 Pandas를 이루는 데이터 유형이며 2차원 테이블 구조를 가지고 있습니다.

DataFrame은 Series 객체를 모아둔 컨테이너(container)로 볼 수 있습니다.

2차원 배열은 모든 원소들이 같은 데이터타입을 가져야 하나 DataFrame은 각 열마다 다른 타입을 가질 수 있습니다.

 

DataFrame을 생성하는 방법은 다양합니다. 예를 들어

데이터를 리스트나 일,이차원 배열 혹은 딕셔너리를 준비합니다. 

각 열에 대한 이름(Column)을 정합니다. 

각 행에 대한 이름(Index)을 정합니다.

 

이에 대한 이해를 돕기 위해 소스코드를 첨부합니다.

import pandas as pd

data = [
    [654,592,623,561,620],
    [175,108,62,65,77],
    [131,84,50,51,62],
    [26,18,11,11,12],
    [21,19,16,13,10]
]
columns = ["2018.09", "2018.12","2019.03","2019.06","2019.09"]
index = ["매출액", "순이익", "당기순이익", "영업이익률","ROE"]

df = pd.DataFrame(data, index=index, columns=columns)

 

이렇게 생성해도 되고

import pandas as pd

data = {
    "2018.09":[654,592,623,561,620],
    "2018.12":[175,108,62,65,77],
    "2019.03":[131,84,50,51,62],
    "2019.06":[26,18,11,11,12],
    "2019.09":[21,19,16,13,10]
}

#columns = ["2018.09", "2018.12","2019.03","2019.06","2019.09"]
index = ["매출액", "순이익", "당기순이익", "영업이익률","ROE"]

df = pd.DataFrame(data, index=index)

딕셔너리를 이용해서 이렇게 만들어도 됩니다.

 

이러나 저러나 결과는 index를 row label로 삼고 column을 기준으로 구조를 만듭니다.

DataFrame 구조

 

 

values, index, columns

 

이렇게 생성된 DataFrame(이하 df)에서 다시 값들을 확인해보겠습니다.

df.values

 

 

다음은 column입니다. 

df.columns

 

 

다음은 index입니다.

df.index

 

 

index,column의 이름을 정할 수도 있습니다.

df.index.name = "재무정보"
df.columns.name = "날짜"

 

 

df.T를 통해 전치(transpose)를 할 수도 있습니다.

df.T #df.t는 안됩니다.

 

 

열 삭제, 생성

 

동적으로 column을 추가로 생성할 수도 있습니다. 2019-12 column을 추가해보겠습니다. 

df["2019.12"] = df["2019.09"] * 0.9

 

 

반대로 삭제도 가능합니다. 

del df["2019.12"]

 

 

인덱싱

 

딕셔너리와 비슷하게 column을 기준으로 인덱싱이 가능합니다. 

df["2019.06"]

 

 

이렇게 인덱싱된 데이터는 Series 타입입니다.

 

 

배열을 전달하면 DataFrame을 반환합니다.

df[["2019.06","2019.09"]]

 

 

하나의 열만 가지고 DataFrame을 만들고 싶으면 원소하나 가진 리스트를 전달하면 됩니다.

df[["2019.06"]]

 

 

DataFrame이 문자열을 index로 가지고 있는 경우에는 정수로 인덱싱이 불가합니다.(숫자로 되어 있으면 가능) 

첫번째 열을 가지고 오고 싶어서 df[0]을 입력하면 긴 에러를 보실 수 있습니다.

 

행 단위로 인덱싱 하기 위해서는 슬라이싱(Slicing)을 이용해야합니다. 

df[:1]

 

 

두번째행부터 네번째행까지 읽어옵니다.

df[1:4]

 

 

이름을 이용해서 인덱싱할 수도 있습니다.

df["매출액":"영업이익률"]

(슬라이싱이 아니라 df["매출액"]을 하면 에러가 납니다.)

 

 

 

개별 인덱싱

행을 인덱싱하려고 할 때는 슬라이싱해야합니다. 그러므로

df["매출액":"영업이익률"]

 

 

위 코드는 가능하나 아래는 안됩니다. 

df["매출액"]

 

 

하지만 반대로 열을 기준으로 하면 상관 없습니다.

df["2019.06"]

 

 

그럼 이 열에서 특정행을 인덱싱할 때는 다음과 같습니다.

df["2019.06"]["매출액]

 

이상 DataFrame 기초 포스팅었습니다. 다른 많은 함수는 하나씩 정리하겠습니다

반응형

'파이썬 > 판다스' 카테고리의 다른 글

Pandas Cheatsheet  (0) 2020.01.24
Python Pandas 자질구레, 다모임  (0) 2020.01.07
Pandas - Series 기초  (1) 2019.11.10
이 포스팅은 쿠팡파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.

댓글