pandas 데이터프레임 완전 정복 — 5가지 핵심 영역으로 전체 구조를 한 번에 잡는 법

F1 레이스에서 이런 상황을 상상해보자. 피트 월에서 실시간으로 들어오는 타이어 온도, 랩타임, 연료량 데이터를 한 화면에서 보고, 특정 구간만 뽑아보고, 이상값을 걷어내고, 전략 판단에 쓰는 장면. 파이썬에서 그 역할을 하는 도구가 바로 pandas 데이터프레임이다.

pandas 데이터프레임은 행과 열로 구성된 2차원 표 구조다. 엑셀 시트와 겉모습은 비슷하지만, 코드로 조작할 수 있고 수십만 행도 거뜬히 처리한다. 데이터를 불러오고, 들여다보고, 정제하고, 수정하는 전 과정이 이 하나의 구조 위에서 돌아간다.

요즘은 AI에게 pandas 작업을 직접 요청하는 경우가 많다. “이 CSV 파일에서 결측치 처리해줘”, “특정 조건으로 필터링해줘”처럼. 그런데 개념을 모른 채 코드를 받으면 결과가 이상해도 어디서 틀렸는지 알 수 없다. 코드보다 개념이 먼저인 이유다. 이 글에서는 세부 문법 대신 5가지 흐름 안에서 무엇을 결정해야 하는지를 중심으로 설명한다.

pandas 데이터프레임이란 무엇인가

pandas 데이터프레임은 파이썬의 데이터 분석 라이브러리 pandas가 제공하는 핵심 자료구조다. 행(Row)과 열(Column)로 이루어진 2차원 구조이며, 각 열은 Series라는 1차원 객체로 구성된다.

구성 요소설명
행(Row)하나의 데이터 레코드
열(Column)하나의 속성(변수)
인덱스(Index)각 행의 고유 식별자 (기본값: 0, 1, 2…)
SeriesDataFrame의 각 열을 구성하는 1차원 구조

엑셀과 다른 점은 명확하다. 코드로 조작할 수 있고, 수십만 행의 데이터도 빠르게 처리하며, 다른 파이썬 라이브러리(NumPy, Scikit-learn, Matplotlib 등)와 바로 연결된다. 데이터를 다루는 모든 작업의 출발점이 pandas 데이터프레임이라고 봐도 무방하다.

pandas 데이터프레임을 다루는 5가지 핵심 영역

pandas 데이터프레임 작업은 아래 5가지 흐름으로 이루어진다. 이 순서가 곧 데이터를 다루는 실제 작업 순서다.

순서영역이 단계에서 결정할 것
1생성데이터를 어떤 구조로 DataFrame에 담을 것인가
2입출력어떤 파일을 읽고, 어떤 형식으로 저장할 것인가
3조회·인덱싱원하는 데이터를 어떤 기준으로 꺼낼 것인가
4결측치 전처리빈 값을 제거할 것인가, 채울 것인가
5수정·삭제·필터링데이터를 어떤 조건으로 걸러내고 바꿀 것인가

각 영역은 독립적으로 보이지만, 실제 분석 작업에서는 이 순서대로 연결해서 쓴다. AI에게 pandas 작업을 맡길 때도 이 흐름을 알아야 어느 단계에서 무엇을 요청해야 할지 판단할 수 있다.

1단계 — 생성: 데이터를 어떤 구조로 담을 것인가

데이터를 pandas 데이터프레임으로 만들 때 가장 먼저 결정해야 할 것은 구조다. 어떤 항목이 열(Column)이 되고, 어떤 단위로 행(Row)을 구성할 것인지.

가장 직관적인 방법은 파이썬 딕셔너리를 활용하는 것이다. 딕셔너리의 Key가 컬럼명이 되고, Value 리스트의 각 항목이 행 데이터가 된다. 구조를 먼저 머릿속에 그릴 수 있어야 AI에게도 정확하게 요청할 수 있다.

예를 들어 “랩 번호, 랩타임, 타이어 종류를 담은 DataFrame을 만들어줘”처럼 컬럼 구성을 명확히 전달하면 AI가 생성해주는 코드도 의도에 맞게 나온다. 반대로 “데이터 만들어줘”라고만 하면 AI는 임의 구조로 만들어버린다.

기본값으로 인덱스는 0부터 시작하는 정수가 자동으로 붙는다. 날짜나 특정 값을 인덱스로 쓰고 싶다면 이 의도도 함께 전달해야 한다.

2단계 — 입출력: 파일을 읽고 저장할 때 결정해야 할 것

현실에서 데이터를 처음부터 직접 만드는 경우는 드물다. 대부분 CSV, Excel, JSON 같은 파일을 불러와서 쓴다. pandas는 파일 형식에 관계없이 읽기는 read_*, 저장은 to_* 라는 대칭 구조를 제공한다. 형식만 다를 뿐 패턴은 같다.

파일을 읽거나 저장할 때 실무에서 반드시 결정해야 할 것이 두 가지 있다.

첫 번째는 인덱스를 저장할 것인가다. 기본값은 인덱스가 별도 컬럼으로 저장된다. 다음에 다시 불러왔을 때 원하지 않는 컬럼이 하나 더 생기는 원인이 여기서 나온다. AI에게 “CSV로 저장해줘”라고 요청할 때 “인덱스 제외하고”라는 조건을 함께 넣어야 깔끔하게 저장된다.

두 번째는 결측치를 어떻게 인식시킬 것인가다. 파일 안에서 결측치를 “N/A”, “없음”, “-” 같은 문자열로 관리하는 경우가 있다. 이 값들을 pandas가 자동으로 빈 값(NaN)으로 인식하지 않는다. 읽어올 때 어떤 문자열이 결측치인지 명시해줘야 한다. AI에게 요청할 때 “이 파일에서 ‘없음’은 결측치로 처리해줘”처럼 구체적으로 전달해야 의도대로 동작한다.

pandas 데이터프레임 결측치 처리 제거와 채우기 판단 기준 시각화

3단계 — 조회와 인덱싱: 어떤 기준으로 데이터를 꺼낼 것인가

pandas 데이터프레임에서 원하는 데이터를 꺼내는 방법은 두 가지 기준으로 나뉜다. 이름(라벨)으로 접근하는 방식과 번호(위치)로 접근하는 방식이다.

기준개념끝 값 포함 여부
이름(라벨) 기반컬럼명·인덱스 이름으로 접근포함
번호(위치) 기반0부터 시작하는 정수로 접근미포함

이 둘의 차이가 중요한 이유는 범위를 지정할 때 결과가 달라지기 때문이다. 이름 기반으로 1행부터 3행을 요청하면 3행이 포함되지만, 번호 기반으로 같은 범위를 요청하면 3행이 빠진다. AI에게 “3번째 행까지 가져와줘”라고 할 때 어느 방식을 쓰는지 모르면 결과가 한 행씩 어긋나는 상황이 생긴다.

조회의 출발점은 항상 데이터 전체 구조를 먼저 확인하는 것이다. 상위 몇 개만 미리 보는 기능이 있는데, AI에게 “데이터 구조 먼저 보여줘”라고 요청하면 대부분 이 기능을 활용해서 보여준다. 컬럼명, 데이터 타입, 행 수를 눈으로 확인한 뒤 조회 조건을 잡는 것이 순서다.

단일 셀 하나만 꺼내는 방법도 별도로 존재한다. 대용량 데이터에서 특정 셀 하나를 반복적으로 조회할 때 속도 차이가 나기 때문이다. 개념을 알아야 AI에게 “빠른 방법으로 단일 값만 꺼내줘”라고 요청할 수 있다.

4단계 — 결측치 전처리: 제거할 것인가, 채울 것인가

실제 데이터에는 반드시 빈 값(결측치, NaN)이 존재한다. 전처리에서 가장 먼저 해야 할 일은 결측치가 어디에, 얼마나 있는지 파악하는 것이다. 규모를 모른 채 처리 방법을 결정하는 것은 순서가 틀렸다.

AI에게 “결측치 처리해줘”라고만 하면 AI가 임의로 방법을 선택한다. 어떤 방식으로 처리할지는 사람이 먼저 판단해야 한다. 전략은 두 가지다. 제거하거나, 채우거나.

제거할 때 결정해야 할 것

결측치가 있는 행을 제거할 때 기준을 먼저 정해야 한다.

상황결정 기준
결측치가 하나라도 있으면 행 전체 삭제데이터 손실을 감수하더라도 완전한 행만 쓰겠다
전체 컬럼이 모두 비어있는 행만 삭제일부 결측치가 있어도 해당 행의 다른 값은 쓰겠다

행을 삭제하면 인덱스 번호가 뒤섞인다. 0, 1, 2, 3이었다가 0, 2, 3처럼 중간이 빠지는 형태가 된다. 이 상태에서 번호 기반으로 데이터를 꺼내려 하면 예상과 다른 결과가 나온다. AI에게 삭제를 요청할 때는 “삭제 후 인덱스 재정렬도 같이 해줘”라고 함께 요청하는 것이 안전하다.

채울 때 결정해야 할 것

결측치를 채울 때는 어떤 값으로 채울지가 핵심이다. 이 판단은 데이터의 성격에 따라 달라진다.

데이터 성격적합한 채우기 방식
기본값이 명확한 경우 (예: 미응답 = 0)고정값으로 채움
연속형 수치, 이상값이 적은 경우평균값으로 채움
이상값이 많아 평균이 왜곡될 경우중앙값으로 채움
시간 순서가 있는 시계열 데이터앞 또는 뒤 인접값으로 채움

시계열 데이터에서 결측치는 인접값으로 채우는 것이 가장 합리적이다. 온도, 센서값, 랩타임처럼 시간 흐름에 따라 변하는 데이터는 중간에 빈 값이 생겨도 바로 앞뒤 값과 크게 차이나지 않는다. AI에게 요청할 때도 “시계열 데이터니까 앞 값으로 채워줘”처럼 방식을 명확히 지정해야 의도대로 처리된다.

결측치 처리에서 반드시 알아야 할 개념이 하나 있다. pandas 데이터프레임의 대부분 연산은 원본을 바꾸지 않는다. 결측치를 채우는 작업도 마찬가지다. 처리 결과를 원본에 반영하려면 결과를 다시 변수에 저장하거나, 원본에 즉시 반영하는 옵션을 명시해야 한다. AI가 코드를 만들어줬는데 실행해도 데이터가 바뀌지 않는다면, 이 원칙을 적용하지 않은 경우가 대부분이다.

5단계 — 수정·삭제·필터링: 데이터를 원하는 형태로 가공하는 3가지 방식

데이터를 정제했다면 이제 분석 목적에 맞게 가공할 차례다. 이 단계에서 하는 작업은 크게 세 가지다. 조건에 맞는 행을 걸러내거나, 특정 값을 바꾸거나, 불필요한 행·열을 지우는 것이다.

필터링 — 조건을 먼저 언어로 정의한다

필터링은 조건을 만족하는 행만 골라내는 작업이다. 코드보다 조건을 먼저 언어로 명확하게 정의하는 것이 중요하다. “랩타임이 92초 미만인 행만 추출”처럼 조건이 명확하면 AI에게도 정확하게 요청할 수 있다.

조건을 만족하지 않는 행을 완전히 삭제하는 대신, 해당 위치의 값만 다른 값으로 교체하는 방식도 있다. 원본 행 수를 유지하면서 특정 값만 마스킹하거나 대체해야 할 때 쓴다. AI에게는 “조건 불만족 행은 삭제하지 말고 0으로 바꿔줘”처럼 의도를 구체적으로 전달하면 된다.

수정 — 접근 방법과 반영 여부를 구분해서 이해한다

값을 수정하는 작업은 두 단계로 이루어진다. 먼저 어느 위치의 값인지 특정하고, 그 위치에 새 값을 넣는다. 위치를 특정하는 방법은 3단계 조회·인덱싱에서 이미 다뤘다. 직접 값을 집어넣는 방식의 수정은 원본에 즉시 반영된다는 점이 다른 연산과 다르다.

삭제 — 행과 열 삭제를 구분해서 요청한다

행을 삭제할 때와 열을 삭제할 때는 내부 처리 방향이 다르다. AI에게 요청할 때 “1월 1일 행을 삭제해줘”와 “A 컬럼을 삭제해줘”를 명확하게 구분해서 전달해야 한다. 그리고 이 경우에도 원본 반영 여부를 직접 확인하거나, 요청 시 “원본에 바로 반영해줘”라고 명시하는 것이 안전하다.

열을 추가할 때는 새 컬럼명을 정해서 값을 그대로 넣으면 된다. 단, 기존 DataFrame과 행 수가 일치해야 오류가 나지 않는다. AI에게 “새 컬럼 추가해줘”라고 요청할 때 행 수가 다른 데이터를 넣으려 한다면 이 제약을 먼저 확인해야 한다.

핵심 요약

pandas 데이터프레임을 처음 배울 때 전체 구조를 먼저 잡아두는 것이 중요하다. 세부 문법은 AI가 만들어줄 수 있다. 하지만 각 단계에서 무엇을 결정해야 하는지 모르면, AI가 만들어준 코드가 틀렸을 때도 어디서 잘못됐는지 알 수 없다.

단계핵심 결정 사항
생성어떤 항목을 컬럼으로 구성할 것인가
입출력인덱스 저장 여부, 결측치 문자열 인식 방식
조회·인덱싱이름 기반 vs 번호 기반, 끝 값 포함 여부
결측치 전처리제거 기준 선택, 채우기 방식 판단, 원본 반영 확인
수정·삭제·필터링조건을 언어로 먼저 정의, 행·열 삭제 구분, 원본 반영 여부 확인

공통으로 적용되는 원칙이 하나 있다. pandas의 대부분 연산은 원본을 바꾸지 않는다. AI에게 작업을 맡길 때도 이 사실을 알고 있어야 결과를 제대로 확인할 수 있다.

[링크 제안]

pandas 데이터프레임의 각 열은 Series라는 1차원 구조로 이루어져 있다.
DataFrame을 제대로 다루기 전에 Series가 어떻게 동작하는지 먼저 잡아두는 것이 흐름을 이해하는 데 빠르다.

pandas는 내부적으로 NumPy 배열 위에서 동작한다.
AI에게 데이터 연산을 요청할 때 NumPy 개념 없이는 결과를 검증하기 어렵다.

pandas 공식 문서에서 더 깊이 파고들 수 있다: pandas 공식 문서

FAQ

작업을 단계로 쪼개는 것이 핵심이다. “pandas로 데이터 전처리 해줘”처럼 한꺼번에 요청하면 AI가 임의로 판단해서 처리한다. “CSV 불러오기 → 결측치 개수 확인 → 평균값으로 채우기”처럼 단계별로 나눠서 순서대로 요청하면 의도대로 동작할 확률이 높아진다. 이 글의 5단계 흐름이 그 순서를 그대로 반영하고 있다.

컬럼명이 명확하게 있을 때는 이름 기반이 직관적이다. 순서 기반으로 범위를 다루거나 컬럼명 없이 위치만 알 때는 번호 기반이 낫다. 중요한 것은 끝 값 포함 여부가 다르다는 점이다. 이름 기반은 끝 값이 포함되고, 번호 기반은 포함되지 않는다. AI에게 요청할 때 “3번째 행까지”라는 표현이 어느 방식을 기준으로 하는지 명시하지 않으면 결과가 한 행씩 어긋날 수 있다.

pandas 데이터프레임의 대부분 연산은 원본을 직접 수정하지 않고 새로운 결과를 반환하는 방식으로 동작한다. 처리 결과를 원본에 유지하려면 결과를 다시 같은 변수에 저장하거나, 원본에 즉시 반영하는 옵션을 추가해야 한다. AI가 만들어준 코드를 실행해도 데이터가 바뀌지 않는다면, 이 부분을 AI에게 다시 요청하면 된다. “결과를 원본에 바로 반영하는 방식으로 수정해줘”처럼.

관련 글 보기