데이터 분석의 첫걸음, 파이썬 Pandas 입문 가이드

읽기 예상 시간: 8분

Pandas의 핵심 자료구조인 Series(1차원)와 DataFrame(2차원)의 기본 개념과 생성 방법을 명확하게 정리해요. 딕셔너리와 리스트를 활용한 데이터프레임 생성법과 흔히 겪는 길이 불일치 에러의 확실한 해결책을 알아봐요. 또한, CSV나 엑셀 등 외부 데이터를 불러오고 저장하는 방법, 특히 usecols 사용 시 주의해야 할 사항을 다뤄요. 마지막으로 불러온 데이터의 전체 구조와 기초 통계를 빠르게 파악하는 info, describe 등 핵심 데이터 탐색 메서드 활용법을 익혀볼게요.

목차

파이썬 판다스 설치와 코드 작성 화면이 띄워진 노트북

Pandas 시작하기: 설치부터 불러오기까지

데이터 분석을 시작하려고 마음먹으면 가장 먼저 접하게 되는 라이브러리가 바로 Pandas예요. 파이썬 환경에서 데이터를 쉽고 직관적으로 다룰 수 있게 도와주는 아주 강력한 도구죠. 엑셀로 하던 데이터 정렬, 자르기, 합치기, 통계 요약 같은 작업들을 코드로 훨씬 빠르고 대용량으로 처리할 수 있어요. 혹시 엑셀이 버벅거릴 정도로 큰 데이터를 다뤄보셨나요? 그런 답답함을 한 번에 해결해 주는 게 바로 이 라이브러리예요.

하지만 무작정 코드를 치기 전에 내 컴퓨터에 Pandas가 깔려 있어야 해요. 파이썬만 설치했다고 바로 쓸 수 있는 건 아니거든요. Pandas 패키지 설치 방법을 보면 여러 가지 옵션이 나와 있는데, 터미널이나 명령 프롬프트를 열고 직접 설치 명령어를 입력해주는 게 가장 확실한 방법이에요.

1
터미널 열기

윈도우라면 ‘명령 프롬프트(cmd)’나 PowerShell을 열고, 맥이나 리눅스라면 ‘터미널’ 앱을 실행하세요.

2
설치 명령어 입력

본인의 환경에 맞는 패키지 관리자 명령어를 아래 코드처럼 입력하고 엔터를 치면 설치가 진행돼요.

bash
# pip를 사용하는 경우
pip install pandas

# 아나콘다(Conda)를 사용하는 경우
conda install pandas

설치가 잘 끝났다면 에러 메시지 없이 명령 프롬프트가 다시 나타날 거예요. 가끔 빨간색 에러 메시지가 뜬다면 파이썬 버전 문제이거나 권한 문제일 수 있으니 로그를 잘 확인해 보셔야 해요.

설치가 끝났으니 파이썬 코드 안에서 Pandas를 불러와야 하겠죠? 이때 pd라는 짧은 이름으로 줄여서 부르는 게 전 세계 개발자들의 관례예요. 매번 pandas라고 길게 다 치면 귀찮잖아요.

python
# pandas 라이브러리를 불러오고, 앞으로는 'pd'라고 부르겠다고 선언해요.
import pandas as pd

이 한 줄을 파이썬 스크립트나 주피터 노트북 맨 위에 써주면, 앞으로는 pandas.함수이름() 대신 pd.함수이름()처럼 짧고 편하게 쓸 수 있어요.

📌 Note

만약 가상환경을 사용 중이라면, 가상환경이 활성화된 상태에서 설치 명령어를 입력해야 해요. 그렇지 않으면 시스템 전역에 설치되어 나중에 패키지 버전 충돌이 일어날 수 있어요.

인덱스 라벨이 붙어 있는 1차원 형태의 파일 서랍장

1차원 데이터 다루기: Series

Pandas에는 데이터를 담는 두 가지 핵심 상자가 있어요. 그중 첫 번째가 바로 Series라는 녀석이에요. Series는 인덱스(이름표)가 붙은 1차원 값 목록이라고 생각하면 딱 맞아요. 파이썬의 기본 리스트와 비슷해 보이지만, 각각의 값에 번호표나 이름표가 명확하게 붙어 있다는 게 가장 큰 차이점이죠.

이 두 가지 자료구조에 대해 Series DataFrame 차이를 다룬 공식 문서를 보면, Series는 표의 ‘열(Column) 하나’를 의미한다고 설명해요. 나중에 배울 2차원 표 형태인 DataFrame도 결국 이 Series 여러 개가 나란히 이어 붙어 만들어지는 거예요. 그래서 이걸 먼저 이해하는 게 중요해요.

Series는 우리가 익히 아는 파이썬의 딕셔너리나 리스트를 이용해 아주 쉽게 만들 수 있어요.

딕셔너리와 리스트로 Series 만들기

python
import pandas as pd

# 1. 딕셔너리로 만들기: key값이 자동으로 인덱스(이름표)가 돼요.
dic_data = {'a': 1, 'b': 2, 'c': 3}
dic_series = pd.Series(dic_data)
print("--- 딕셔너리로 만든 Series ---")
print(dic_series)

# 2. 리스트로 만들기: index를 지정하지 않으면 0부터 시작하는 숫자가 자동으로 붙어요.
list_data = [10, 20, 30]
list_series = pd.Series(list_data, index=['x', 'y', 'z'])
print("\n--- 리스트로 만든 Series ---")
print(list_series)

# 3. 인덱스 없이 리스트만 넣기
auto_index_series = pd.Series([100, 200, 300])
print("\n--- 인덱스를 생략한 Series ---")
print(auto_index_series)

# 4. Series의 기본 정보 확인하기
print("\n--- Series 속성 확인 ---")
print("값(values):", list_series.values) # 실제 데이터 값만 배열 형태로 가져와요.
print("인덱스(index):", list_series.index) # 부여된 이름표 목록을 가져와요.
print("데이터 타입(dtypes):", list_series.dtypes) # 데이터의 형태(숫자, 문자 등)를 알려줘요.

리스트로 만들 때 index= 옵션을 생략하면 0, 1, 2 순서로 번호표가 자동으로 붙는다는 점을 꼭 기억해 두세요. 가끔 인덱스가 헷갈려서 엉뚱한 데이터를 꺼내는 실수를 하곤 하거든요.

💡 Tip

인덱스는 숫자 말고도 문자열, 날짜 등 다양한 데이터 타입으로 설정할 수 있어요. 특히 시계열 데이터를 다룰 때는 날짜를 인덱스로 지정하면 데이터를 월별, 연도별로 뽑아오기가 훨씬 수월해져요.

행과 열이 명확하게 구분된 2차원 그리드 형태의 수납장

2차원 표 다루기: DataFrame

이제 실무에서 가장 많이 만나게 되는 2차원 표 형태인 DataFrame을 알아볼 차례예요. 앞서 배운 열 하나짜리 Series를 옆으로 나란히 이어 붙이면 마치 엑셀 시트 같은 DataFrame이 완성돼요. 행(Row)과 열(Column)로 구성된 완벽한 데이터 표의 형태를 갖추게 되는 거죠. 실제 데이터 분석 업무의 99%는 이 형태로 진행된다고 봐도 무방해요.

DataFrame을 만들 때도 딕셔너리나 리스트를 적극적으로 활용해요. 열(Column)을 기준으로 데이터를 쭉쭉 채워 넣을 때는 딕셔너리를 쓰고, 한 행(Row)씩 데이터를 순서대로 입력할 때는 리스트를 겹쳐서 쓰는 게 생각보다 아주 편해요. 상황에 따라 본인에게 편한 방법을 골라 쓰면 돼요.

실습: 열 단위와 행 단위로 표 만들기

python
import pandas as pd

# 1. 딕셔너리로 만들기 (열 단위 입력)
dic = {
    'Name': ['John', 'Merry', 'Chris'],
    'Number': [1, 2, 3],
    'Month': ['Feb', 'Oct', 'Nov']
}
df_dic = pd.DataFrame(dic)
print("--- 정상적으로 만들어진 DataFrame ---")
print(df_dic)

# 2. 리스트로 만들기 (행 단위 입력)
ls = [
    ['John', 1, 'Feb'],
    ['Merry', 2, 'Oct'],
    ['Chris', 3, 'Nov']
]
# 리스트로 만들 때는 columns 옵션으로 열 이름을 따로 적어줘야 해요.
df_list = pd.DataFrame(ls, columns=['Name', 'Number', 'Month'])
print("\n--- 리스트로 만든 DataFrame ---")
print(df_list)

# 3. 초보자가 가장 많이 하는 실수: 열의 길이가 다른 경우
try:
    error_dic = {
        'Name': ['John', 'Merry', 'Chris'],
        'Number': [1, 2, 3, 4], # 이 열만 데이터가 4개예요!
        'Month': ['Feb', 'Oct', 'Nov']
    }
    df_error = pd.DataFrame(error_dic)
except ValueError as e:
    print("\n--- 에러 발생! ---")
    print("ValueError:", e)

딕셔너리로 DataFrame을 만들 때는 반드시 모든 열의 데이터 개수(리스트 길이)가 똑같아야 해요. 하나라도 길이가 다르면 파이썬이 데이터를 어떻게 짝지어 표로 만들어야 할지 몰라서 바로 에러를 뱉어내거든요. 이 부분을 처음 배우시는 분들이 정말 많이 실수해요.

⚠️ Warning

ValueError: All arrays must be of the same length 에러가 보인다면, 딕셔너리에 넣은 리스트들의 길이가 모두 같은지부터 확인해 보세요. 길이가 모자란 곳에는 차라리 빈 값(None)을 넣어서라도 길이를 꼭 맞춰주셔야 해요.

수많은 문서 더미에서 필요한 문서만 골라내는 모습

외부 데이터 불러오기와 저장

실무에서는 데이터를 파이썬 코드 안에 일일이 직접 타자로 치는 일이 거의 없어요. 누가 수천, 수만 줄의 데이터를 직접 입력하고 있겠어요? 이미 만들어져 있는 CSV나 엑셀 파일을 불러와서 작업하는 게 아주 일반적이죠. 그중에서도 가장 자주 쓰는 형식은 용량이 가볍고 호환성이 좋은 CSV(Comma-Separated Values) 파일이에요.

CSV 파일을 읽을 때는 pd.read_csv() 함수를 사용해요. read_csv 함수에는 데이터를 깔끔하게 불러오기 위한 꽤 많은 옵션이 있는데, 그중에서도 index_colusecols는 실무에서 정말 유용하게 쓰여요. index_col은 파일 안의 특정 열을 데이터프레임의 라벨(인덱스)로 쓰겠다는 뜻이고, usecols는 파일 전체 내용 중 내가 분석에 필요한 열만 쏙 골라서 가져오겠다는 뜻이에요.

1
파일 경로 확인하기

불러올 CSV 파일이 지금 작성 중인 파이썬 스크립트와 같은 폴더에 있는지 확인하세요. 폴더가 다르면 절대 경로를 적어줘야 해요.

2
read_csv로 읽어오기

필요한 옵션을 적절히 섞어서 데이터를 메모리에 올리고, 작업이 끝나면 to_csv로 다시 내보내면 돼요.

다양한 옵션으로 불러오기

python
import pandas as pd

# 가상의 csv 파일이 있다고 가정하고 코드를 작성해 볼게요.

# 1. 일반적인 불러오기
# df = pd.read_csv('titanic_train.csv')

# 2. 필요한 열만 고르고, 특정 열을 인덱스로 지정하기
# PassengerId 열을 인덱스로 쓰고, Survived, Pclass, Age 열만 가져와요.
# df = pd.read_csv('titanic_train.csv',
#                  index_col='PassengerId',
#                  usecols=['PassengerId', 'Survived', 'Pclass', 'Age'])

# 3. 흔히 발생하는 에러 상황 (usecols에 index_col 열을 빼먹었을 때)
try:
    # usecols에 'PassengerId'가 없는데 index_col로 지정하려고 해서 에러가 나요.
    df_error = pd.read_csv('titanic_train.csv',
                           index_col='PassengerId',
                           usecols=['Survived', 'Pclass', 'Age'])
except ValueError as e:
    print("에러 발생:", e)

# 4. 작업한 데이터를 새로운 csv 파일로 저장하기
# df.to_csv('titanic_filtered.csv')

여기서 정말 주의해야 할 점이 있어요. index_col로 지정할 열은 반드시 usecols 명단 안에도 포함되어 있어야 해요. 파일을 읽으면서 가져오지도 않은 열을 데이터프레임의 이름표로 쓰겠다고 하면 파이썬 입장에선 황당하겠죠? 당연히 에러가 납니다.

참고로 엑셀 파일은 pd.read_excel()로 읽을 수 있고, 웹페이지에 있는 표는 pd.read_html()로 긁어올 수 있는데, 옵션을 사용하는 원리는 CSV 파일과 거의 똑같아요.

❗ 중요

파일 경로를 적을 때, 윈도우 환경에서는 백슬래시(\) 대신 슬래시(/)를 사용하거나 경로 문자열 앞에 r을 붙여야(예: r’C:\data\file.csv’) 폴더 인식을 제대로 하고 경로 에러를 막을 수 있어요.

복잡한 데이터 시트 위에 놓여 있는 돋보기
테이블 위에 놓인 물음표가 새겨진 노트와 안경

불러온 데이터 한눈에 파악하기

원하는 파일을 무사히 불러왔다면, 데이터가 어떻게 생겼는지 바로 확인해야 해요. 수만 줄이 넘는 데이터를 엑셀처럼 스크롤 내리며 볼 수는 없잖아요? 무리하게 엑셀로 열어보려다 컴퓨터가 멈춰버리는 경험, 한 번쯤 해보셨을 거예요. 이때 활용할 수 있는 강력한 탐색 메서드들이 준비되어 있어요.

이번 실습에서는 데이터 분석 입문자라면 무조건 한 번쯤 다뤄보는 타이타닉 예제 데이터셋을 활용할게요. 데이터를 불러온 직후 전체적인 구조와 기초 통계를 빠르게 파악하는 게 데이터 분석의 진정한 첫걸음이에요. 이걸 생략하고 바로 분석 모델링에 들어가면 나중에 결측치나 이상한 데이터 때문에 크게 고생할 수 있거든요.

필수 탐색 메서드 4가지

python
import pandas as pd

# (이 코드는 동일한 폴더에 titanic_train.csv 파일이 있어야 정상 동작해요.)
# df = pd.read_csv('titanic_train.csv')

# --- 아래는 예시 출력을 확인하기 위해 임의로 만든 가짜 DataFrame이에요. ---
data = {
    'PassengerId': [1, 2, 3, 4, 5],
    'Survived': [0, 1, 1, 1, 0],
    'Pclass': [3, 1, 3, 1, 3],
    'Name': ['Braund', 'Cumings', 'Heikkinen', 'Futrelle', 'Allen'],
    'Age': [22.0, 38.0, 26.0, 35.0, 35.0]
}
df = pd.DataFrame(data)
# -------------------------------------------------------------------------

print("--- head(): 데이터 위에서부터 5행 보기 ---")
print(df.head()) # 기본적으로 맨 위 5줄을 보여줘요. 괄호 안에 숫자를 넣으면 그만큼 보여줘요.

print("\n--- tail(): 데이터 아래에서부터 5행 보기 ---")
print(df.tail()) # 맨 밑의 5줄을 보여줘서 파일이 끝까지 잘 불러와졌는지 확인해요.

print("\n--- info(): 데이터 전체 구조 파악 ---")
df.info() # 각 열의 데이터 타입(문자인지 숫자인지)과 비어있는 값(결측치)이 있는지 한눈에 보여줘요.

print("\n--- describe(): 기초 통계 요약 ---")
print(df.describe()) # 수치형 데이터들의 평균, 최소/최대값, 표준편차 등을 알아서 계산해 줘요.

데이터를 처음 받으면 head()로 대략적인 생김새를 보고, info()로 빈 값(결측치)이 없는지, 데이터 타입은 올바른지 확인한 다음, describe()로 숫자들의 대략적인 분포를 훑어보는 과정을 꼭 습관으로 만들어두세요. 이 3가지 조합만 잘 써도 초기 데이터 파악은 아주 충분해요.

자주 묻는 질문

Q. 로컬 환경에 Pandas를 어떻게 설치해야 하나요?

파이썬 기본 패키지 관리자인 pip를 사용하신다면, 터미널이나 명령 프롬프트(cmd)를 열고 pip install pandas를 입력하고 엔터를 치면 돼요. 데이터 분석 전용인 아나콘다(Anaconda) 환경을 사용 중이시라면 conda install pandas를 입력해서 설치해 보세요. 환경에 맞는 명령어를 쓰는 게 중요해요.

Q. 본문 실습에 사용된 타이타닉 데이터셋은 어디서 구할 수 있나요?

Kaggle의 타이타닉 생존자 예측 경진대회 사이트에 접속해서 무료로 회원가입을 하신 후 ‘Data’ 탭을 누르면 train.csv 파일을 다운로드할 수 있어요. 이 파일을 다운받아서 파이썬 코드가 있는 폴더에 넣어두고 실습을 진행하시면 완벽하게 똑같이 따라 하실 수 있어요.

Q. read_csv() 함수에서 usecols와 index_col을 함께 썼는데 계속 에러가 납니다. 왜 그런가요?

usecols 옵션으로 내가 가져올 열의 목록을 필터링할 때는, index_col에서 이름표로 쓰겠다고 지정한 열도 반드시 그 목록 안에 명시해 줘야 해요. 예를 들어 PassengerId를 인덱스로 쓰겠다고 마음먹었다면 usecols=['PassengerId', 'Name', 'Age']처럼 명단에 잊지 말고 포함시켜야 파이썬이 헷갈리지 않고 정상적으로 데이터를 불러와요.

이 글이 마음에 드세요?

RSS 피드를 구독하세요!

댓글 남기기