판다스 Series 완전 정복 — AI에게 맡기기 전에 반드시 알아야 할 3가지 개념

F1 레이스에서 이런 상황을 상상해보자. 피트 크루가 랩타임 데이터를 들고 있다. 숫자만 줄줄이 나열된 종이라면 “이게 몇 번째 랩 데이터야?”라는 질문이 반드시 따라붙는다. 하지만 각 숫자 옆에 “Lap1”, “Lap2”, “Lap3″이라는 이름표가 붙어 있다면 상황이 달라진다. 데이터를 볼 때마다 맥락을 되묻지 않아도 된다.

판다스 Series는 바로 그 이름표를 데이터에 붙이는 구조다. AI에게 “이 데이터에서 특정 조건을 만족하는 값만 뽑아줘”라고 요청할 때, AI가 제대로 작동하는 코드를 써주려면 데이터 구조를 먼저 이해해야 한다. 개념을 모른 채 코드만 받아 실행하면, 결과가 이상해도 왜 이상한지 알 수 없다. 이 글은 코드보다 개념을 먼저 짚는다.

판다스 Series가 필요한 이유 — 데이터에 맥락을 붙인다는 것

NumPy를 먼저 배운 사람이라면 “배열로 충분한데 판다스가 왜 필요한가?”라는 의문이 생긴다. 그 답은 데이터가 실제로 어떻게 생겼는지에 있다.

NumPy 배열은 값만 저장한다. 인덱스는 항상 숫자(0, 1, 2…)다. 데이터가 어떤 의미를 가지는지는 배열 밖에서 별도로 관리해야 한다. 판다스 Series는 다르다. 값과 함께 인덱스 레이블을 저장한다. 그 레이블은 숫자일 수도 있고, “서울”, “대구”, “부산” 같은 문자열일 수도 있다.

항목NumPy ndarray판다스 Series
인덱스숫자(0, 1, 2…)만 가능숫자 + 문자열 모두 가능
결측치 처리별도 처리 필요전용 함수 내장
데이터 이름없음name 속성으로 부여 가능
출력 형태값만 출력인덱스 + 값 함께 출력

현장에서 쌓이는 데이터는 항상 “언제”, “어디서”, “어떤 조건에서” 측정됐는지가 중요하다. NumPy 배열은 그 맥락을 담지 못한다. 판다스 Series는 그 맥락을 데이터 구조 안에 담는다. AI에게 데이터 분석을 요청할 때 “지역별로 분류해줘”, “날짜 기준으로 필터링해줘” 같은 요청이 가능한 것도 이 구조 덕분이다.

Series를 만든다는 것 — 데이터와 인덱스를 함께 설계한다

판다스 Series를 만들 때 결정해야 할 것은 두 가지다. 어떤 값을 담을 것인가, 그리고 각 값의 이름표(인덱스)를 어떻게 붙일 것인가.

인덱스를 따로 지정하지 않으면 0부터 시작하는 숫자가 자동으로 붙는다. 이 상태로도 작동은 하지만, 데이터가 어떤 항목인지는 알 수 없다. AI에게 “세 번째 항목을 꺼내줘”라고 요청하는 것과 “대구 항목을 꺼내줘”라고 요청하는 것은 명확함이 다르다.

인덱스를 문자열로 지정하면 데이터에 맥락이 생긴다. Series를 만들 때 index 파라미터에 레이블 목록을 함께 전달하면 된다. 이 구조를 이해하고 있으면 AI에게 “지역명을 인덱스로 해서 각 지역의 측정값을 Series로 만들어줘”라고 정확하게 요청할 수 있다.

Series를 만드는 방법은 크게 두 갈래다. 직접 값 목록을 입력하거나, 기존 NumPy 배열을 변환하는 방법이다. 어느 쪽이든 판다스가 인식하는 구조는 같다. AI에게 요청할 때는 “어떤 데이터인지”, “인덱스를 어떻게 설정할지”를 함께 알려주면 더 정확한 코드를 받을 수 있다.

Series에 이름을 붙이는 것도 같은 맥락이다. Series 전체에 이름을 붙이거나(name), 인덱스 그룹에 이름을 붙일 수 있다(index.name). 데이터가 많아지고 여러 Series를 다루게 될 때 어떤 Series가 무엇을 의미하는지 구분하는 역할을 한다. DataFrame으로 넘어가면 이 이름 구조가 더 중요해진다.

판다스 Series와 NumPy 배열 구조 비교 인포그래픽

데이터에 접근한다는 것 — 어떤 값을, 어떤 기준으로 꺼낼 것인가

Series를 만들었다면 다음 질문은 “원하는 값을 어떻게 꺼낼 것인가”다. 여기서 판다스 Series의 인덱싱 방식을 이해해야 한다.

값을 꺼내는 방식은 크게 세 가지다. 특정 레이블 하나를 지정하거나, 여러 레이블을 동시에 지정하거나, 조건을 걸어서 해당 조건을 만족하는 값만 걸러내는 방식이다.

하나의 값에 접근할 때는 대괄호 안에 레이블을 넣으면 된다. 여러 값을 동시에 꺼낼 때는 레이블 목록을 리스트 형태로 넣는다. 대괄호가 두 겹이 되는 구조인데, 이것이 NumPy와 다른 점이다. NumPy는 대괄호 하나로 여러 값을 꺼냈지만 판다스 Series는 안쪽 대괄호가 리스트를 의미하고, 바깥 대괄호가 Series에서 그 리스트를 인덱싱하는 구조다. 처음 보면 낯설지만 이 구조를 이해하면 AI가 작성한 코드를 읽을 때도 바로 해석할 수 있다.

조건 기반 접근은 더 강력하다. “0보다 큰 값만 꺼내줘”, “100 이상인 항목만 남겨줘” 같은 조건을 Series에 직접 적용할 수 있다. 중요한 것은 조건 필터링 후에도 인덱스 레이블이 살아있다는 점이다. 어떤 항목이 조건을 만족해서 살아남았는지 바로 알 수 있다. NumPy에서는 값만 남기 때문에 원래 어떤 항목이었는지 추적이 어렵다.

AI에게 “특정 조건을 만족하는 항목만 필터링해줘”라고 요청할 때, 인덱스 레이블이 의미 있는 이름으로 설정되어 있으면 결과를 해석하기가 훨씬 쉬워진다. 데이터 구조 설계와 접근 방식은 서로 연결되어 있다.

결측치를 다룬다는 것 — 없는 값을 어떻게 표현하고 찾을 것인가

현장 데이터에는 항상 빈 값이 섞여 있다. 측정 실패, 누락, 입력 오류 등 이유는 다양하다. 데이터가 몇 개라면 눈으로 확인할 수 있지만, 수십만 건이라면 이야기가 달라진다. 판다스 Series가 전처리에 강한 이유 중 하나가 결측치 탐지 기능을 내장하고 있다는 점이다.

여기서 먼저 이해해야 할 개념이 있다. 결측치는 “값이 없다”는 상태다. 이것을 'NaN'이라는 문자열로 표현하면 판다스는 그것을 값이 없는 것이 아니라 ‘NaN’이라는 글자로 인식한다. 진짜 결측치를 표현하려면 np.nan을 사용해야 한다. 이 차이는 AI가 작성한 코드에서도 자주 등장하는 부분이다. 결과가 이상하게 나올 때 결측치 표현 방식을 먼저 확인해보는 것이 좋다.

결측치를 찾는 방법도 개념이 중심이다. “이 데이터에서 값이 없는 위치가 어디인가”를 묻는 것과 “값이 있는 위치가 어디인가”를 묻는 것, 두 방향으로 질문할 수 있다. 판다스는 각각에 대응하는 함수를 내장하고 있다. 결과는 True/False로 반환되기 때문에, 이것을 합산하면 결측치가 몇 개인지 바로 알 수 있다.

AI에게 “결측치가 있는 행만 찾아줘”라거나 “결측치 개수를 알려줘”라고 요청할 때, 판다스가 결측치를 어떻게 인식하는지 알고 있어야 요청이 정확해진다. np.nan으로 표현된 결측치와 문자열로 입력된 ‘NaN’은 판다스가 다르게 처리한다. 이 개념을 모르면 AI가 올바른 코드를 줘도 데이터 전처리 단계에서 엉뚱한 결과가 나온다.

핵심 요약

판다스 Series는 값에 인덱스 레이블을 붙인 1차원 구조다. NumPy 배열과 달리 문자열 인덱스를 사용할 수 있고, 결측치 처리 기능을 내장하고 있다. Series를 만들 때는 값과 인덱스를 함께 설계하고, 값에 접근할 때는 레이블 지정 또는 조건 필터링으로 접근한다. 결측치는 반드시 np.nan으로 표현해야 판다스가 제대로 인식한다. 이 세 가지 개념을 이해하면, AI가 작성한 판다스 코드를 읽고 검증하는 것도 어렵지 않다.

[링크 제안]

판다스 Series 구조를 이해했다면, 다음 질문은 “이 데이터 자체가 제대로 설계된 것인가”다.

판다스로 데이터를 다루다 보면 피벗과 언피벗이 반드시 등장한다. 구조 변환 개념을 미리 잡아두면 AI 요청이 더 정확해진다.

판다스의 공식 문서는 pandas 공식 문서에서 확인할 수 있다.

FAQ

가능하다. 하지만 개념을 모르면 결과를 검증할 수 없다. “Series를 만들어줘”라고 요청했을 때 AI가 인덱스를 숫자로 설정했는지 문자열로 설정했는지, 결측치를 어떻게 처리했는지를 확인하려면 Series 구조를 알아야 한다. AI는 코드 생성을 빠르게 해주지만, 그 결과가 맞는지 틀린지는 사람이 판단해야 한다.

수치 계산 자체가 목적이라면 NumPy가 빠르고 가볍다. 데이터에 레이블이 필요하거나 결측치가 섞여 있거나 CSV·Excel 파일을 불러와서 분석하는 상황이라면 판다스 Series 또는 DataFrame을 써야 한다. AI에게 요청할 때 “레이블 있는 1차원 데이터”라고 설명하면 판다스 Series를 기반으로 코드를 작성한다.

대부분의 경우 AI는 np.nan을 사용한 코드를 작성한다. 하지만 원본 데이터가 이미 문자열 ‘NaN’으로 들어와 있는 경우, 전처리 없이 분석을 요청하면 AI도 결측치를 제대로 탐지하지 못하는 코드를 줄 수 있다. 데이터 상태를 먼저 파악하고 “문자열 NaN을 실제 결측치로 변환한 뒤 분석해줘”라고 명시하는 것이 안전하다.

관련 글 보기