본문으로 건너뛰기
김신건의 로그

[Pandas] info / memory_usage / describe

· 수정 · 📖 약 1분 · 312자/단어 #python #pandas #eda #memory
Pandas info, Pandas memory_usage, Pandas describe, pandas 탐색

정의

DataFrame 의 메타데이터 / 메모리 / 통계를 빠르게 조회하는 도구.

메서드목적
df.info()컬럼별 dtype + non-null count + 메모리
df.memory_usage(deep=True)컬럼별 정확한 메모리
df.describe()수치형 통계 (count, mean, std, percentile)
df.shape(rows, cols)
df.dtypes컬럼별 dtype
df.head(), df.tail()상/하 5 개
df.sample()무작위
df.nunique()컬럼별 unique 수

info

df.info()
df.info(memory_usage='deep')   # object 컬럼 정확히
python
import pandas as pd
df = pd.DataFrame({
  'name': ['Alice','Bob','Charlie'],
  'age': [30, 25, 35],
  'city': ['Seoul','Busan','Seoul'],
})
df.info()
결과
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 3 entries, 0 to 2
Data columns (total 3 columns):
#   Column  Non-Null Count  Dtype
---  ------  --------------  -----
0   name    3 non-null      object
1   age     3 non-null      int64
2   city    3 non-null      object
dtypes: int64(1), object(2)
memory usage: 200.0+ bytes

memory_usage

df.memory_usage()                # 컬럼별 (object 부정확)
df.memory_usage(deep=True)       # object 의 Python str 까지 계산
df.memory_usage(deep=True).sum()  # 전체
python
import pandas as pd
import numpy as np
np.random.seed(0)
n = 100_000
df = pd.DataFrame({
  'id': np.arange(n),
  'city': np.random.choice(['Seoul','Busan','Daegu'], n),
})
print('shallow:', df.memory_usage().sum() // 1024, 'KB')
print('deep   :', df.memory_usage(deep=True).sum() // 1024, 'KB')
결과
shallow: 1562 KB
deep   : 6402 KB

object (string) 컬럼이 큰 차이를 만든다.

describe

df.describe()                          # 수치형만, 8 가지 통계
df.describe(include='object')          # 문자형
df.describe(include='all')             # 전체
df.describe(percentiles=[.25, .5, .75, .95, .99])
df.describe(datetime_is_numeric=True)  # 날짜
python
import pandas as pd
df = pd.DataFrame({
  'age': [25, 30, 35, 40, 45],
  'salary': [3000, 4500, 6000, 7500, 9000],
})
print(df.describe())
결과
             age       salary
count   5.000000     5.000000
mean   35.000000  6000.000000
std     7.905694  2371.708245
min    25.000000  3000.000000
25%    30.000000  4500.000000
50%    35.000000  6000.000000
75%    40.000000  7500.000000
max    45.000000  9000.000000

info 의 메모리 정보

  • 200.0+ bytes+ : object 컬럼 정확도 보장 안 됨
  • memory_usage='deep'+ 사라짐

자주 쓰는 탐색 시퀀스

df = pd.read_csv('data.csv')
df.shape                                    # 크기
df.head(20)                                  # 어떻게 생겼는지
df.info(memory_usage='deep')                 # dtype + 메모리
df.describe()                                # 수치형
df.describe(include='object')                # 문자형
df.isna().sum()                              # 결측 수
df.nunique()                                 # unique 수
df.duplicated().sum()                        # 중복 행
df.select_dtypes('number').corr()            # 상관관계

메모리 절약 빠른 체크

def memory_report(df):
    mem = df.memory_usage(deep=True)
    pct = (mem / mem.sum() * 100).round(1)
    return pd.DataFrame({'bytes': mem, 'pct': pct, 'dtype': df.dtypes})
memory_report(df)

어느 컬럼이 메모리 hog 인지 즉시 파악.

profiling

탐색을 자동화하는 라이브러리.

# pip install ydata-profiling
from ydata_profiling import ProfileReport
ProfileReport(df).to_file('report.html')

EDA 자동화. 대규모 데이터는 sample 후 사용.

함정

1. memory_usage 의 inaccuracy

object dtype 은 deep=True 없이는 정확하지 않다. 항상 deep=True 권장.

2. describe 의 default

df.describe()        # numeric 만 (기본)
df.describe(include='all')   # 모든 컬럼

object 컬럼이 분석 대상이면 include 명시.

3. info 의 + 의 의미

df.info()
# memory usage: 5.0+ MB    ← + 는 deep 안 계산했다는 표시
df.info(memory_usage='deep')
# memory usage: 12.3 MB    ← 정확

참고

이 글의 용어 (3개)
[Pandas] 성능 / 메모리 최적화pandas
정의 pandas 의 흔한 성능 함정과 최적화 패턴. 벡터화 + dtype 선택 + 알고리즘 의 조합이 핵심. 1. 벡터 연산 우선 100배 이상 차이. 2. dtype 명시로 …
[Pandas] DataFramepandas
정의 은 2차원 레이블 테이블. 각 열이 , 모든 열이 같은 (행 라벨) 를 공유. SQL 테이블 / Excel 시트 / R data.frame 의 Python 대응체. 생성 <…
[Pandas] value_countspandas
정의 는 각 고유값의 등장 빈도 를 내림차순 Series 로 반환. SQL 의 . pandas 1.1+ 부터는 도 가능 (여러 컬럼 조합). 기본 <CodeWithOutput l…

💬 댓글

사이트 검색 / 명령어

검색

스크롤 = 확대/축소 · 드래그 = 이동 · 0 = 원래 크기 · ESC = 닫기