[Pandas] info / memory_usage / describe
Pandas info, Pandas memory_usage, Pandas describe, pandas 탐색
3. info 의
정의
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+ bytesmemory_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 KBobject (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.000000info 의 메모리 정보
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…
💬 댓글