pandas DataFrame 완전 정복 — 생성부터 삭제까지 3단계로 끝내는 법

pandas DataFrame을 처음 마주하면 낯설다. 행이 있고 열이 있고, 인덱스가 있고 컬럼이 있다. 엑셀처럼 생겼는데 엑셀이 아니다. 그런데 딱 한 가지만 먼저 잡으면 된다. pandas DataFrame은 여러 자료형을 하나의 표 구조에 담을 수 있는 2차원 데이터 컨테이너다. 이걸 이해하면 나머지는 자연스럽게 따라온다.

이 글에서는 pandas DataFrame을 어떻게 만들고, 어떤 속성을 조회하고, 필요 없는 데이터를 어떻게 지우는지까지 한 흐름으로 정리한다. 코드를 처음 보는 사람도 따라올 수 있도록 개념 중심으로 설명한다.

pandas DataFrame이란 무엇인가 — numpy 배열과 다른 3가지

numpy 배열도 데이터를 담는 구조다. 그런데 pandas DataFrame과는 결정적으로 다른 점이 있다.

비교 항목numpy 배열pandas DataFrame
자료형 혼합불가 — 하나의 배열에 하나의 자료형만가능 — 컬럼마다 다른 자료형 허용
행/열 이름없음 (인덱스 번호만)인덱스(행 이름) + 컬럼명 모두 지정 가능
시계열 지원없음날짜 기반 인덱스 생성·조회 지원

첫 번째 차이가 핵심이다. 현장 데이터를 다루다 보면 날짜, 숫자, 문자, 카테고리가 한 테이블에 섞여 있는 경우가 대부분이다. numpy 배열은 이걸 하나의 구조로 담지 못한다. pandas DataFrame은 가능하다. 그래서 데이터 분석의 출발점이 된다.

pandas DataFrame에서 행의 이름을 인덱스(Index), 열의 이름을 컬럼(Column) 이라고 부른다. 이 두 가지 개념이 DataFrame의 뼈대다.

DataFrame을 만드는 3가지 방법

방법 1 — 딕셔너리로 만들기

가장 직관적인 방법이다. 딕셔너리의 키(Key)가 컬럼명으로, 밸류(Value)가 해당 컬럼의 데이터로 들어간다.

import pandas as pd

data = {
    '지역': ['서울', '부산', '대구'],
    '지원자수': [120, 85, 60],
    '비용': [3200, 2100, 1800]
}

df = pd.DataFrame(data)

이렇게 만들면 인덱스는 자동으로 0, 1, 2 숫자로 채워진다. 인덱스를 직접 지정하고 싶다면 index 파라미터를 추가한다.

df = pd.DataFrame(data, index=['A', 'B', 'C'])

방법 2 — 리스트(행 단위)로 만들기

행 단위로 데이터를 직접 입력하는 방식이다. 하드코딩이라고도 부른다. 실무에서는 거의 쓰지 않지만, 개념 이해에 유용하다.

df2 = pd.DataFrame(
    [['서울', 120, 3200],
     ['부산', 85, 2100],
     ['대구', 60, 1800]],
    columns=['지역', '지원자수', '비용'],
    index=['A', 'B', 'C']
)

방법 3 — 빈 딕셔너리에 채워 넣기

딕셔너리를 먼저 선언하고 키별로 값을 채워 넣는 방식이다. 데이터를 반복문으로 수집해야 할 때 유용하다.

data = {}
data['지역'] = ['서울', '부산', '대구']
data['지원자수'] = [120, 85, 60]

df3 = pd.DataFrame(data)

실무에서는 대부분 CSV, 엑셀, DB에서 데이터를 불러와 pandas DataFrame을 만든다. 직접 생성하는 경우는 드물다. 그래도 인덱스와 컬럼을 어떻게 지정하는지는 반드시 알아야 한다.

시계열 인덱스로 DataFrame 만드는 법

pandas DataFrame이 강력한 이유 중 하나가 시계열 지원이다. pd.date_range()를 사용하면 날짜 기반 인덱스를 손쉽게 만들 수 있다.

import numpy as np

dates = pd.date_range(start='2026-01-01', periods=6, freq='D')
df4 = pd.DataFrame(np.random.randn(6, 4), index=dates, columns=['A', 'B', 'C', 'D'])

freq 옵션으로 날짜 단위를 바꿀 수 있다.

freq 값의미
'D'일 단위 (기본값)
'B'영업일 기준 (토·일 제외)
'W'주 단위
'MS'월 시작일 기준
'H'시간 단위

장비 데이터나 공정 로그를 다룰 때 날짜 기반 인덱스는 자주 쓰인다. 특히 피벗·언피벗과 함께 쓰면 시계열 데이터를 원하는 형태로 빠르게 재구성할 수 있다.

알아야 할 속성 조회 5가지

pandas DataFrame을 불러왔을 때 가장 먼저 하는 작업이 구조 파악이다. 아래 5가지만 알면 어떤 데이터가 들어왔는지 바로 파악할 수 있다.

df.index    # 인덱스(행 이름) 확인
df.columns  # 컬럼명 확인
df.values   # 데이터 값 확인 (numpy 배열로 반환)
df.dtypes   # 컬럼별 자료형 확인
df.T        # 행과 열을 바꾸는 전치(Transpose)

df.dtypes는 특히 중요하다. pandas DataFrame은 컬럼마다 자료형이 다를 수 있기 때문에, 자료형을 먼저 확인하지 않으면 계산 오류가 발생할 수 있다. 예를 들어 숫자처럼 보이는 데이터가 실제로는 문자열(object)로 저장된 경우가 많다.

인덱스와 컬럼에 이름을 붙이고 싶을 때는 아래처럼 한다.

df.index.name = '연도'
df.columns.name = '지역명'

상위·하위 데이터 빠르게 보기

df.head(3)   # 상위 3개 행 조회 (기본값 5)
df.tail(2)   # 하위 2개 행 조회 (기본값 5)

데이터 규모가 클수록 head()tail()을 먼저 돌려보는 습관이 분석 속도를 높인다.

마이너스 인덱스로도 하위 데이터를 조회할 수 있다.

df.iloc[-2:]  # 끝에서 2개 행 조회
pandas DataFrame 딕셔너리 컬럼 변환 구조

pandas DataFrame에서 컬럼·전체를 삭제하는 법

분석에 필요 없는 컬럼은 미리 제거하는 것이 좋다. 불필요한 데이터가 섞여 있으면 처리 속도도 느려지고 실수도 늘어난다.

특정 컬럼을 삭제하려면 del을 쓴다.

del df['C']   # C 컬럼 삭제

삭제 후 df.columns로 확인하면 해당 컬럼이 사라진 것을 확인할 수 있다.

pandas DataFrame 전체를 삭제할 때도 동일하다.

del df        # DataFrame 자체 삭제

삭제 후 df를 조회하면 NameError: name 'df' is not defined 오류가 뜬다. 변수 자체가 사라졌기 때문이다. 실수로 삭제하지 않도록 주의한다.

핵심 요약

pandas DataFrame을 처음 배울 때 가장 중요한 것은 구조를 이해하는 것이다. 인덱스(행)와 컬럼(열)이 뼈대고, 그 안에 여러 자료형이 함께 들어갈 수 있다는 점이 numpy 배열과의 핵심 차이다.

항목핵심 내용
생성 방법딕셔너리, 리스트(행 단위), 빈 딕셔너리 순차 입력
시계열 인덱스pd.date_range()로 날짜 기반 인덱스 생성
속성 조회index, columns, values, dtypes, T
상위·하위 조회head(), tail(), iloc[-N:]
삭제del df['컬럼명'] / del df

실무에서 pandas DataFrame을 직접 만드는 경우는 드물다. 하지만 인덱스와 컬럼을 다루는 방법, 자료형을 확인하는 방법은 데이터를 불러온 직후 바로 쓰인다. 지금 익혀두면 이후 데이터 정제·분석 단계에서 반드시 빛을 발한다.

pandas DataFrame 구조를 잡았다면, 다음 단계는 데이터 안의 숫자를 어떻게 읽을지다. 상관관계와 인과관계를 혼동하면 분석 결론 자체가 뒤집힌다.

자료형과 데이터 구조를 이해했다면 통계 개념으로 넘어갈 차례다. 자유도가 왜 분포 모양을 바꾸는지 직관적으로 정리했다.

pandas 공식 문서에서 DataFrame API 전체를 확인할 수 있다. pandas 공식 문서는 pandas.pydata.org에서 확인할 수 있다.

FAQ

겉모습은 비슷하지만 목적이 다르다. 엑셀은 사람이 직접 셀을 편집하는 도구고, pandas DataFrame은 코드로 대용량 데이터를 자동 처리하기 위한 구조다. 수십만 행 데이터를 필터링·집계·변환하는 작업은 pandas DataFrame이 압도적으로 빠르다.

날짜 기반 분석이나 특정 ID를 기준으로 데이터를 조회·병합할 때 인덱스를 직접 지정하면 편리하다. 예를 들어 장비 ID나 날짜를 인덱스로 설정하면, 해당 기준으로 데이터를 빠르게 슬라이싱할 수 있다.

데이터 안에 문자가 하나라도 섞여 있으면 pandas가 해당 컬럼 전체를 object(문자열)로 처리한다. CSV를 불러올 때 결측값이나 단위 표기(예: ‘100개’)가 섞여 있는 경우 자주 발생한다. pd.to_numeric()으로 강제 변환하거나 데이터를 정제한 뒤 다시 확인해야 한다.

관련 글 보기