이전 포스팅까지 Series에 대해 자세하게 살펴봤습니다.
이번 포스팅부터는 DataFrame에 대해 알아보도록 하겠습니다.
import pandas as pd
import numpy as np
1. 주요 속성과 메서드
데이터프레임을 구성하는 하나의 컬럼은 Series입니다.
여러 Series들이 모여 동일한 행 인덱스를 공유하며 하나의 데이터프레임을 이루는 것입니다.
이러한 데이터프레임 객체의 주요 속성과 메서드에 대해 알아보겠습니다.
1-1. 속성
✅ shape
nba.shape
# (450, 5)
type(nba.shape)
# <class 'tuple'>
데이터프레임의 형태를 튜플로 리턴합니다.
위 코드에서 nba 데이터프레임의 형태가 (450, 5)라는 사실을 알 수 있습니다.
✅ index
type(nba.index)
# <class 'pandas.core.indexes.range.RangeIndex'>
nba.index
# RangeIndex(start=0, stop=450, step=1)
데이터프레임의 행 인덱스를 리턴합니다.
별도의 행 인덱스를 설정하지 않으면 기본적으로 RangeIndex 객체가 데이터프레임의 인덱스를 구성합니다.
✅ columns
type(nba.columns)
# <class 'pandas.core.indexes.base.Index'>
nba.columns
# Index(['Name', 'Team', 'Position', 'Birthday', 'Salary'], dtype='object')
데이터프레임의 컬럼명을 리턴합니다.
행 인덱스와 방향이 다를 뿐, 열 인덱스라고 보면 됩니다.
✅ axes
oil.axes
# [RangeIndex(start=0, stop=1218, step=1),
# Index(['date', 'dcoilwtico'], dtype='object')]
index와 columns 속성의 리턴값을 합친 리스트를 반환합니다.
✅ dtypes
type(nba.dtypes)
# <class 'pandas.core.series.Series'>
nba.dtypes
# Name object
# Team object
# Position object
# Birthday datetime64[ns]
# Salary int64
# dtype: object
# Series의 value_counts 메서드
nba.dtypes.value_counts()
# object 3
# datetime64[ns] 1
# int64 1
# dtype: int64
데이터프레임의 컬럼별 데이터 타입을 나타내는 Series를 리턴합니다.
리턴 받은 Series에 대해 value_counts 메서드를 사용할 수 있습니다.
✅ size
nba.size
# 2250
데이터프레임에서 결측값을 포함한 총 데이터의 개수를 리턴합니다.
nba.count()
# Name 450
# Team 450
# Position 450
# Birthday 450
# Salary 450
# dtype: int64
type(nba.count())
# <class 'pandas.core.series.Series'>
# DataFrame에서 결측값을 제외한 모든 데이터의 합 구하는 방법
nba.count().sum()
# 2250
결측값을 제외하고 싶다면 size 속성 대신 count 메서드를 사용하면 됩니다.
데이터프레임의 count 메서드는 컬럼별로 결측값을 제외한 총 데이터의 개수를 Series 형태로 리턴합니다.
1-2. 메서드
✅ head, tail, sample
head와 tail 메서드는 디폴트로 각각 데이터프레임의 처음과 마지막 5개 데이터를 가져옵니다.
sample 메서드는 전달 받은 인수 만큼 데이터프레임에서 임의의 데이터를 추출합니다.
✅ info
데이터프레임의 기본 정보를 리턴합니다.
info 메서드를 사용해서 어떤 컬럼에 결측값이 존재하는지 확인할 수 있습니다.
아래 그림에서 oil_price 컬럼에는 43개의 결측값이 있는 것을 알 수 있습니다.
✅ describe
oil.describe(include='all')
데이터프레임의 numeric 컬럼에 대한 기술통계량 정보를 리턴합니다.
include 옵션을 사용하면 numeric을 제외한 다른 타입의 컬럼에 대한 기술통계량 정보도 가져옵니다.
2. 데이터프레임 조회
2-1. 컬럼 조회
✅ 단일 컬럼 조회
nba['Position'].head()
# Name
# Shake Milton SG
# Christian Wood PF
# PJ Washington PF
# Derrick Rose PG
# Marial Shayok G
# Name: Position, dtype: object
type(nba['Position'])
# <class 'pandas.core.series.Series'>
데이터프레임에서 하나의 컬럼을 조회하는 경우에는 대괄호를 사용합니다.
이는 Series를 리턴합니다.
✅ 복수 컬럼 조회
type(nba[['Salary', 'Birthday']])
# <class 'pandas.core.frame.DataFrame'>
nba[['Salary', 'Birthday']].head()
2개 이상의 컬럼을 조회하는 경우에도 대괄호를 사용합니다.
단, 입력한 컬럼의 순서대로 데이터를 가져옵니다.
nba[['Birthday', 'Salary']].head()
입력한 컬럼의 순서를 바꾸면 가져온 데이터의 컬럼 순서가 이전과 바뀐 것을 확인할 수 있습니다.
✅ select_dtypes 메서드
DataFrame.select_dtypes(include, exclude)
nba.select_dtypes(include='object')
select_dtypes 메서드를 사용하면 컬럼의 데이터 타입에 따라 가져올지 여부를 정할 수 있습니다.
아래 예제코드는 열에 저장된 데이터들의 타입이 문자열인 컬럼만 가져옵니다.
2-2. loc 접근자
✅ 단일 행 조회
nba.loc['LeBron James']
# Team Los Angeles Lakers
# Position PF
# Birthday 1984-12-30 00:00:00
# Salary 37436858
# Name: LeBron James, dtype: object
type(nba.loc['LeBron James'])
# <class 'pandas.core.series.Series'>
행 레이블 인덱스와 loc 접근자를 함께 사용하면 단일 행 데이터를 가져옵니다.
이는 Series를 리턴합니다.
✅ 복수 행 조회
nba.loc[['Kawhi Leonard', 'Paul George']]
앞서 살펴본 방법을 사용해서도 2개 이상의 행 데이터를 가져올 수 있습니다.
단, 입력한 행 레이블의 순서대로 데이터를 가져옵니다.
nba.sort_index().loc['Otto Porter':'Patrick Beverley']
슬라이싱과 유사한 방법을 통해 2개 이상의 행을 가져올 수도 있습니다.
레이블 시퀀스를 사용하는 방법인데, 시퀀스를 선택하기 전에 인덱스를 정렬하는 것이 좋습니다.
그림을 보면 처음에 'Otto Porter', 마지막에 'Patrick Beverley' 값이 위치한 것을 알 수 있습니다.
✅ 행과 열 조회
💡 at 접근자를 사용하는 방법도 존재합니다.
oil.loc[:5, :]
loc 접근자를 사용하면 특정 행과 열에 해당하는 데이터를 조회할 수 있습니다.
위 코드는 행 레이블 인덱스가 5이하인 데이터의 모든 컬럼을 가져옵니다.
oil.loc[:3, ['date', 'euro_price']]
다음은 행 인덱스 레이블이 3이하인 데이터 중에서 특정 컬럼에 해당하는 값들만 조회하는 예제입니다.
oil.loc[:3, 'date':'price']
마지막으로 레이블 시퀀스를 사용하는 예제입니다.
마치며
이상으로 데이터프레임의 주요 속성과 메서드, 데이터를 조회하는 방법들에 대한 정리를 마치겠습니다.
다음 포스팅에서는 데이터프레임을 구성하는 데이터들을 조작하는 방법들에 대해 알아보도록 하겠습니다.
'파이썬・ML > pandas' 카테고리의 다른 글
판다스 카테고리 타입 데이터 커스텀 정렬하기 (0) | 2023.07.30 |
---|---|
판다스 데이터프레임 정리(2) 결측값/중복값/필터링/정렬 등 (0) | 2023.07.30 |
판다스 Series 정리(2) 인덱싱/필터링/정렬/연산/결측값 (0) | 2023.07.27 |
판다스 Series 정리(1) 특징/속성/생성법 (0) | 2023.07.27 |
판다스 데이터프레임과 피벗테이블 (0) | 2023.07.03 |