[판다스(Pandas)]데이터프레임(DataFrame) - DataFrame 객체 생성, 속성(attribute), 컬럼(column) 다루기, inplace=True

Jihwan Jung·2022년 10월 6일
1

🐼판다스

목록 보기
3/12
post-thumbnail

💡오늘 배울 내용


지난번 배웠던 판다스의 기본 자료 구조 시리즈(Series)에 이어, 2차원 데이터 구조 데이터프레임(DataFrame) 대해 알아봅시다.

🔎데이터프레임(DataFrame)


판다스의 자료구조 데이터프레임은, 엑셀의 데이터 시트처럼 2차원 배열입니다. 다음의 특징을 가지는데 행과 열로 구성되는 2차원 데이터 구조이고 각 열은 각각 데이터 타입(dtype)을 갖고 있습니다.

🔘2차원 데이터구조 - xlsx 문서의 시트처럼
🔘행(row), 열(column)으로 구성
🔘각 열(column)은 각각의 데이터 타입을 가짐

🔎데이터프레임 생성


대표적으로 2차원 리스트를 통해 생성하는 방법, 딕셔너리를 통해 생성하는 방법 두가지가 있습니다.

🔔list를 통한 생성


import pandas as pd

pd.DataFrame([[1, 2, 3], 
              [4, 5, 6], 
              [7, 8, 9]])
>>


판다스 DataFrame() 메서드를 통해 데이터프레임을 만듭니다. 2차원 리스트를 입력하면 이를 데이터프레임으로 바꾸어줍니다.

pd.DataFrame([[1, 2, 3], 
              [4, 5, 6], 
              [7, 8, 9]], columns=['가', '나', '다'])
>>


0부터 순서대로 자동 생성되는 컬럼명 대신 직접 입력한 컬럼명을 쓰고 싶다면, columns=[]를 통해 임의로 지정해줄 수 있습니다.

🔔dictionary를 통한 생성


dictionary를 통해 데이터프레임을 생성할 수도 있습니다. 2차원 리스트를 DataFrame() 메서드에 넣어 생성하는 것과 비슷하지만, 딕셔너리의 key값이 자동적으로 column 명으로 변환된다는 점에서 더 편리할 때가 많습니다.

import pandas as pd

data = {
    '이름': ['김철수', '이영희', '홍길동'], 
    '학교': ['서울고', '대전고', '경기고'], 
    '점수': [80, 95, 85]
}

pd.DataFrame(data)
>>

딕셔너리의 key값은 column 명으로 사용되고, 딕셔너리의 value값은 리스트의 형태로 있어야 합니다.

🔎속성(attribute)


위에서 생성한 데이터프레임을 예로 들어, DataFrame이 갖는 속성 몇가지를 알아봅시다.

import pandas as pd

data = {
    '이름': ['김철수', '이영희', '홍길동'], 
    '학교': ['서울고', '대전고', '경기고'], 
    '점수': [80, 95, 85]
}

df = pd.DataFrame(data)
print(df)
>>

🔔index - 인덱스


데이터프레임의 1열에서 index를 확인할 수 있습니다. index를 따로 지정하거나 변경하지 않았다면, 데이터프레임의 인덱스는 기본 값으로 RangeIndex를 가집니다.

import pandas as pd

print(df.index)
>> RangeIndex(start=0, stop=3, step=1)

🔔columns - 컬럼 명


데이터프레임의 열 레이블 이름을 컬럼(column)이라고 합니다. df.columns을 통해 컬럼 명을 불러올 수 있습니다.

print(df.columns)
>> Index(['이름', '학교', '점수'], dtype='object')

🔔values - 데이터 값


데이터 값들을 Numpy Array형식으로 가져옵니다.

print(df.values)
>> array([['김철수', '서울고', 80],
          ['이영희', '대전고', 95],
          ['홍길동', '경기고', 85]], dtype=object)

🔔dtype - 데이터 타입


column 마다 갖고있는 데이터 타입들을 불러옵니다.

print(df.dtypes)
>> 이름    object
   학교    object
   점수     int64
   dtype: object

🔔T - 전치


데이터프레임을 전치(Transpose)하여 보여줍니다.

print(df.T)
>> 

🔎인덱스(index) 지정


print(df)
>>

df.index에 리스트 형태로 바인딩하여 인덱스를 지정해 줄 수 있습니다.

df.index = ['1번', '2번', '3번']
print(df)
>>

print(df.index)
>> Index(['1번', '2번', '3번'], dtype='object')

새롭게 인덱스를 지정한 후 df.index를 찍어 보면, 기존의 RangeIndex에서 지정한 값으로 바뀐 것을 확인할 수 있습니다.

🔎컬럼(column) 다루기


컬럼으로 데이터를 필터링하는 등의 다양한 작업을 할 수 있습니다.

🔔컬럼 가져오기 - Series


딕셔너리에서 key값으로 value를 가져오는 것 처럼, DataFrame에 key 값으로 column의 이름을 지정하여 column을 선택할 수 있습니다.

DataFrame명['Column명']을 통해 한개의 컬럼을 가져올 수 있습니다. 한개의 컬럼을 선택시 해당하는 컬럼의 자료들이 Series로 불러집니다.

print(df)
>>

print(df['이름'])
>> 0    김철수
   1    이영희
   2    홍길동
   Name: 이름, dtype: object

Fancy indexing으로 2개 이상의 column을 선택하여 볼 수 있습니다. 선택할 column들을 대괄호로 묶어 DataFrame명['Column명']안에 넣어주어야 합니다.

print(df[['이름', '점수']])
>>     이름  점수
   0  김철수  80
   1  이영희  95
   2  홍길동  85

위의 예는 Fancy Indexing으로 두가지 컬럼(이름, 점수)을 가져오는 예시 코드입니다.

🔔컬럼명 변경 - rename


rename() 메서드를 통해 column명을 변경할 수 있습니다.

df = df.rename(columns={'이름': 'name', '점수':'score'})

print(df)
>>


각각 '이름'과 '점수'였던 column명이 'name', 'score'로 바뀐 것을 확인해봅시다.

🔔inplace=True


메서드를 통해 df를 수정할 수 있지만, 수정한 데이터프레임을 다시 바인딩 해주어야 변경사항이 적용된다는 번거로움이 있습니다. inplace=True옵션을 통해 변경사항을 바로 적용할 수 있습니다.

컬럼명을 변경하는 위의 코드를 확인해보면, df.rename으로 수정한 데이터프레임을 다시 df에 바인딩해주고 있는것을 확인할 수 있습니다.

df.rename(columns={'name': '이름'}, inplace=True)
print(df)

위와 같이, inplace 옵션을 사용하면 바인딩을 한번 거치는 과정을 생략할 수 있습니다.

profile
22.10月~24.07月 공군 암호병 복무중/ 사회 과학과 딥 러닝에 관심이 있는 학부생(CS&E)입니다. 기술과 사회에 대한 이해를 바탕으로, 비즈니스 감각과 기술적 역량을 함께 갖춘 인공지능 프로그래머•데이터 과학자로 성장하고 싶습니다.

0개의 댓글