🤖

본 콘텐츠의 이미지 및 내용은 AI로 생성되었습니다.

⚠️

본 콘텐츠의 이미지 및 내용을 무단으로 복제, 배포, 수정하여 사용할 경우 저작권법에 의해 법적 제재를 받을 수 있습니다.

이미지 로딩 중...

Pandas 기초 DataFrame 다루기 완벽 가이드 - 슬라이드 1/7
A

AI Generated

2025. 12. 1. · 20 Views

Pandas 기초 DataFrame 다루기 완벽 가이드

데이터 분석의 필수 도구인 Pandas의 기초를 다룹니다. DataFrame 생성부터 파일 입출력, 데이터 탐색까지 실무에서 바로 활용할 수 있는 핵심 기능을 익혀봅니다.


목차

  1. Pandas_설치_및_import
  2. Series와_DataFrame_생성
  3. CSV_Excel_파일_읽기_쓰기
  4. 컬럼_선택과_필터링
  5. head_tail_info_describe
  6. 인덱스_설정과_활용

1. Pandas 설치 및 import

어느 날 김개발 씨가 회사에서 첫 데이터 분석 업무를 맡게 되었습니다. 엑셀로는 도저히 처리할 수 없는 10만 건의 고객 데이터를 앞에 두고 막막해하던 그때, 선배가 다가와 말했습니다.

"Pandas 써봤어요? 이거 없으면 데이터 분석 못 해요."

Pandas는 파이썬에서 데이터를 다루기 위한 핵심 라이브러리입니다. 마치 엑셀의 기능을 파이썬 코드로 사용할 수 있게 해주는 강력한 도구와 같습니다.

Pandas를 설치하고 import하는 것은 데이터 분석의 첫걸음이며, 이것만 잘 해두면 수십만 건의 데이터도 몇 줄의 코드로 처리할 수 있습니다.

다음 코드를 살펴봅시다.

# Pandas 설치 (터미널에서 실행)
# pip install pandas

# Pandas 라이브러리 불러오기
import pandas as pd

# 설치 및 버전 확인
print(pd.__version__)

# numpy도 함께 사용하는 경우가 많습니다
import numpy as np

# 정상적으로 import 되었는지 간단히 테스트
data = {'이름': ['김개발', '박시니어']}
df = pd.DataFrame(data)
print(df)

김개발 씨는 입사 3개월 차 주니어 개발자입니다. 마케팅팀에서 고객 데이터 분석을 요청받았는데, 엑셀 파일을 열어보니 행이 10만 개가 넘었습니다.

엑셀로 열기만 해도 컴퓨터가 버벅거리는 상황, 어떻게 해야 할까요? 선배 개발자 박시니어 씨가 다가와 말합니다.

"데이터 분석하려면 Pandas부터 설치해야죠. 이게 없으면 시작도 못 해요." 그렇다면 Pandas란 정확히 무엇일까요?

쉽게 비유하자면, Pandas는 마치 슈퍼 엑셀과 같습니다. 엑셀에서 할 수 있는 거의 모든 작업을 코드로 할 수 있고, 엑셀보다 훨씬 큰 데이터도 빠르게 처리할 수 있습니다.

수백만 행의 데이터도 몇 초 만에 불러오고, 복잡한 계산도 한 줄의 코드로 끝낼 수 있습니다. Pandas가 없던 시절에는 어땠을까요?

개발자들은 파이썬의 기본 리스트와 딕셔너리만으로 데이터를 다뤄야 했습니다. 평균을 구하려면 반복문을 돌려야 했고, 특정 조건으로 필터링하려면 수십 줄의 코드를 작성해야 했습니다.

더 큰 문제는 성능이었습니다. 큰 데이터를 다룰수록 처리 속도가 급격히 느려졌습니다.

바로 이런 문제를 해결하기 위해 Pandas가 등장했습니다. Pandas를 사용하면 복잡한 데이터 처리를 단 몇 줄로 끝낼 수 있습니다.

또한 내부적으로 C언어로 최적화되어 있어 처리 속도도 매우 빠릅니다. 무엇보다 전 세계 데이터 분석가들이 사용하는 표준 도구이기 때문에, 관련 자료와 커뮤니티도 풍부합니다.

위의 코드를 한 줄씩 살펴보겠습니다. 먼저 pip install pandas 명령어로 라이브러리를 설치합니다.

이 명령어는 터미널이나 명령 프롬프트에서 실행합니다. 다음으로 import pandas as pd 구문이 핵심입니다.

여기서 pd는 pandas의 별칭인데, 전 세계 개발자들이 약속처럼 사용하는 관례입니다. 매번 pandas라고 길게 쓰는 대신 pd라고 짧게 쓸 수 있어 편리합니다.

실제 현업에서는 어떻게 활용할까요? 예를 들어 쇼핑몰 서비스를 개발한다고 가정해봅시다.

매일 쌓이는 주문 데이터를 분석하려면 Pandas가 필수입니다. 일별 매출 집계, 인기 상품 분석, 고객 구매 패턴 파악 등 모든 작업의 시작점이 바로 import pandas as pd입니다.

하지만 주의할 점도 있습니다. 초보 개발자들이 흔히 하는 실수 중 하나는 pandas를 pd가 아닌 다른 이름으로 import하는 것입니다.

물론 동작은 하지만, 다른 사람의 코드를 읽거나 온라인 자료를 참고할 때 혼란스러울 수 있습니다. 따라서 반드시 import pandas as pd 형태로 사용하는 것이 좋습니다.

다시 김개발 씨의 이야기로 돌아가 봅시다. 박시니어 씨의 조언을 듣고 Pandas를 설치한 김개발 씨는 설레는 마음으로 첫 줄을 입력했습니다.

import pandas as pd. 드디어 데이터 분석의 세계로 첫발을 내딛은 것입니다.

실전 팁

💡 - import pandas as pd는 전 세계 공통 관례입니다. 반드시 pd로 별칭을 지정하세요.

  • Jupyter Notebook을 사용하면 데이터 분석 작업이 훨씬 편리합니다.

2. Series와 DataFrame 생성

Pandas를 설치한 김개발 씨가 본격적으로 데이터를 다루려고 합니다. 그런데 코드를 보니 Series니 DataFrame이니 생소한 용어가 나옵니다.

"이게 다 뭐예요?" 선배에게 물으니 박시니어 씨가 웃으며 대답합니다. "Pandas의 기본 자료구조야.

이거 모르면 아무것도 못 해."

Series는 1차원 배열로, 엑셀의 한 열과 같습니다. DataFrame은 2차원 표 형태로, 엑셀 시트 전체와 같습니다.

이 두 가지가 Pandas의 핵심 자료구조이며, 모든 데이터 분석 작업은 이것들을 기반으로 이루어집니다.

다음 코드를 살펴봅시다.

import pandas as pd

# Series 생성 - 1차원 데이터
scores = pd.Series([85, 90, 78, 92], name='점수')
print(scores)

# 딕셔너리로 DataFrame 생성 - 2차원 데이터
data = {
    '이름': ['김개발', '이분석', '박시니어', '최주니어'],
    '나이': [28, 32, 35, 25],
    '부서': ['개발팀', '데이터팀', '개발팀', '개발팀']
}
df = pd.DataFrame(data)
print(df)

# 리스트로 DataFrame 생성
df2 = pd.DataFrame([['김개발', 28], ['이분석', 32]],
                   columns=['이름', '나이'])

김개발 씨가 Pandas를 설치하고 나서 첫 번째로 마주친 벽은 바로 자료구조였습니다. 파이썬에는 리스트와 딕셔너리가 있는데, Pandas에는 왜 또 다른 자료구조가 필요한 걸까요?

박시니어 씨가 화이트보드 앞에 서서 설명을 시작합니다. "엑셀 시트를 떠올려봐요." 그렇다면 SeriesDataFrame은 정확히 무엇일까요?

쉽게 비유하자면, Series는 엑셀에서 하나의 열을 뽑아낸 것과 같습니다. 예를 들어 학생들의 점수만 쭉 나열한 것이 Series입니다.

반면 DataFrame은 엑셀 시트 전체입니다. 이름, 나이, 점수 등 여러 열이 모여 하나의 표를 이루는 것이죠.

파이썬 기본 자료구조만 사용하면 어떤 문제가 있을까요? 리스트로 데이터를 저장하면 어떤 위치에 어떤 데이터가 있는지 기억하기 어렵습니다.

딕셔너리를 중첩해서 사용하면 코드가 복잡해지고 가독성이 떨어집니다. 무엇보다 데이터 분석에 필요한 연산들, 예를 들어 평균 계산이나 그룹별 집계 같은 작업을 하려면 복잡한 코드를 직접 작성해야 합니다.

바로 이런 문제를 해결하기 위해 Series와 DataFrame이 만들어졌습니다. Series를 사용하면 각 데이터에 자동으로 인덱스가 붙습니다.

0번째 데이터, 1번째 데이터처럼 위치로 접근할 수도 있고, 원한다면 이름 같은 라벨로도 접근할 수 있습니다. DataFrame은 여러 개의 Series를 묶어놓은 것이라고 생각하면 됩니다.

각 열이 하나의 Series이고, 이것들이 모여 표를 이룹니다. 위의 코드를 자세히 살펴보겠습니다.

먼저 pd.Series 함수로 Series를 생성합니다. 리스트를 넣어주면 되고, name 파라미터로 이 Series의 이름을 지정할 수 있습니다.

DataFrame은 pd.DataFrame 함수로 생성하는데, 딕셔너리를 넣어주면 키가 열 이름이 되고 값이 해당 열의 데이터가 됩니다. 실제 현업에서는 어떻게 활용할까요?

회원 정보를 관리한다고 가정해봅시다. 회원 아이디, 이름, 가입일, 구매 금액 등의 정보가 있을 것입니다.

이런 데이터를 DataFrame으로 만들면, 특정 조건에 맞는 회원을 쉽게 찾고, 통계를 내고, 시각화할 수 있습니다. 처음에는 딕셔너리로 DataFrame을 만들지만, 실제로는 대부분 파일에서 데이터를 불러와 DataFrame을 생성합니다.

하지만 주의할 점도 있습니다. 초보 개발자들이 흔히 하는 실수 중 하나는 딕셔너리의 각 리스트 길이를 다르게 하는 것입니다.

예를 들어 이름은 4개인데 나이는 3개만 있으면 오류가 발생합니다. DataFrame은 표 형태이기 때문에 모든 열의 길이가 같아야 합니다.

다시 김개발 씨의 이야기로 돌아가 봅시다. 박시니어 씨의 설명을 들은 김개발 씨가 직접 DataFrame을 만들어봤습니다.

회사 동료들의 정보를 입력하고 출력해보니, 깔끔한 표 형태로 나타납니다. "오, 이거 진짜 엑셀 같네요!"

실전 팁

💡 - DataFrame을 만들 때 딕셔너리의 모든 값은 같은 길이의 리스트여야 합니다.

  • columns 파라미터로 열 순서를 지정할 수 있습니다.

3. CSV Excel 파일 읽기 쓰기

김개발 씨가 드디어 실전 업무에 돌입했습니다. 마케팅팀에서 보내준 엑셀 파일을 분석해야 하는데, 데이터를 어떻게 불러올지 막막합니다.

"혹시 데이터를 일일이 타이핑해야 하나요?" 박시니어 씨가 웃습니다. "아니, read_csv 한 줄이면 돼."

read_csvread_excel은 파일에서 데이터를 불러오는 함수입니다. 마치 엑셀에서 파일 열기 버튼을 누르는 것과 같습니다.

반대로 to_csvto_excel은 분석 결과를 파일로 저장할 때 사용합니다. 이 네 가지 함수만 알면 데이터 입출력은 끝입니다.

다음 코드를 살펴봅시다.

import pandas as pd

# CSV 파일 읽기
df = pd.read_csv('customers.csv')

# 인코딩 지정 (한글 파일의 경우)
df = pd.read_csv('customers.csv', encoding='utf-8')

# Excel 파일 읽기
df_excel = pd.read_excel('sales.xlsx', sheet_name='1월')

# CSV 파일로 저장 (인덱스 제외)
df.to_csv('result.csv', index=False, encoding='utf-8-sig')

# Excel 파일로 저장
df.to_excel('result.xlsx', index=False, sheet_name='분석결과')

김개발 씨가 마케팅팀에서 보내준 파일을 받았습니다. customers.csv라는 파일인데, 열어보니 고객 정보가 수만 건이나 들어있습니다.

이걸 어떻게 파이썬으로 가져올 수 있을까요? 박시니어 씨가 한 줄의 코드를 보여줍니다.

df = pd.read_csv('customers.csv'). "이게 끝이야." 그렇다면 파일 입출력 함수들은 정확히 어떻게 동작할까요?

쉽게 비유하자면, read_csv는 마치 엑셀에서 파일 열기를 누르는 것과 같습니다. 파일 경로만 알려주면 Pandas가 알아서 데이터를 읽어 DataFrame으로 변환해줍니다.

to_csv는 반대로 다른 이름으로 저장하기 버튼과 같습니다. 분석한 결과를 다시 파일로 내보낼 수 있습니다.

파일 입출력이 없던 시절에는 어땠을까요? 개발자들은 파일을 한 줄씩 읽어서 직접 파싱해야 했습니다.

쉼표로 구분된 값을 분리하고, 문자열을 숫자로 변환하고, 예외 처리도 해야 했습니다. 파일 형식이 조금만 달라져도 코드를 수정해야 했습니다.

이런 작업에만 반나절이 걸리기도 했습니다. 바로 이런 문제를 해결하기 위해 read_csv와 read_excel이 만들어졌습니다.

read_csv를 사용하면 한 줄로 CSV 파일 전체를 DataFrame으로 불러올 수 있습니다. 또한 다양한 옵션을 제공해서 구분자가 쉼표가 아니거나 헤더가 없는 파일도 처리할 수 있습니다.

read_excel은 엑셀 파일 전용인데, 여러 시트가 있는 파일에서 특정 시트만 불러오는 것도 가능합니다. 위의 코드를 자세히 살펴보겠습니다.

먼저 read_csv 함수에 파일 경로를 넣어 호출합니다. 한글이 포함된 파일이라면 encoding='utf-8'을 지정해주는 것이 좋습니다.

엑셀 파일을 읽을 때는 read_excel을 사용하고, sheet_name 파라미터로 원하는 시트를 지정할 수 있습니다. 저장할 때 to_csv와 to_excel을 사용하는데, index=False를 지정하면 불필요한 인덱스 열이 저장되지 않습니다.

실제 현업에서는 어떻게 활용할까요? 매일 아침 서버에서 로그 파일이 CSV 형태로 생성된다고 가정해봅시다.

이 파일을 read_csv로 불러와 분석하고, 결과를 to_excel로 저장해서 팀장님께 보고할 수 있습니다. 정기적으로 반복되는 리포트 작업을 자동화하는 첫걸음이 바로 파일 입출력입니다.

하지만 주의할 점도 있습니다. 초보 개발자들이 흔히 하는 실수 중 하나는 한글 인코딩 문제입니다.

윈도우에서 만든 CSV 파일은 cp949나 euc-kr 인코딩인 경우가 많은데, 이를 고려하지 않으면 한글이 깨져서 보입니다. 또한 to_csv로 저장할 때 encoding='utf-8-sig'를 사용해야 엑셀에서 열었을 때 한글이 제대로 보입니다.

다시 김개발 씨의 이야기로 돌아가 봅시다. read_csv 한 줄로 수만 건의 데이터를 불러온 김개발 씨는 감탄했습니다.

"이걸 예전에는 어떻게 했을까요?" 박시니어 씨가 먼 산을 바라보며 말합니다. "그때는...

말도 마."

실전 팁

💡 - 한글이 깨지면 encoding='cp949' 또는 encoding='euc-kr'을 시도해보세요.

  • to_csv 저장 시 index=False를 습관처럼 사용하세요. 불필요한 인덱스 열이 생기지 않습니다.

4. 컬럼 선택과 필터링

김개발 씨가 고객 데이터를 불러오는 데 성공했습니다. 그런데 열이 스무 개가 넘습니다.

분석에 필요한 건 이름과 구매금액 두 개뿐인데, 어떻게 필요한 열만 뽑아낼 수 있을까요? 또한 100만원 이상 구매한 VIP 고객만 따로 보고 싶습니다.

컬럼 선택은 DataFrame에서 원하는 열만 뽑아내는 것입니다. 마치 엑셀에서 특정 열만 선택해서 복사하는 것과 같습니다.

필터링은 특정 조건에 맞는 행만 추출하는 것입니다. 이 두 가지를 조합하면 원하는 데이터만 깔끔하게 추출할 수 있습니다.

다음 코드를 살펴봅시다.

import pandas as pd

df = pd.DataFrame({
    '이름': ['김개발', '이분석', '박시니어', '최주니어'],
    '나이': [28, 32, 35, 25],
    '부서': ['개발팀', '데이터팀', '개발팀', '개발팀'],
    '연봉': [4000, 5500, 7000, 3500]
})

# 단일 컬럼 선택 (Series 반환)
names = df['이름']

# 여러 컬럼 선택 (DataFrame 반환)
subset = df[['이름', '연봉']]

# 조건으로 필터링 (연봉 5000 이상)
high_salary = df[df['연봉'] >= 5000]

# 여러 조건 조합 (개발팀이면서 나이 30 이상)
filtered = df[(df['부서'] == '개발팀') & (df['나이'] >= 30)]

김개발 씨가 드디어 데이터를 불러오는 데 성공했습니다. 그런데 문제가 생겼습니다.

고객 정보 DataFrame에는 이름, 연락처, 주소, 이메일, 가입일, 최근접속일, 구매횟수, 총구매금액 등 열이 스무 개가 넘습니다. 필요한 건 이름과 구매금액뿐인데 어떻게 하죠?

박시니어 씨가 간단하게 답합니다. "필요한 열만 뽑으면 되지." 그렇다면 컬럼 선택필터링은 정확히 어떻게 동작할까요?

쉽게 비유하자면, 컬럼 선택은 마치 도서관에서 필요한 책만 골라 책상 위에 올려놓는 것과 같습니다. 전체 서가에서 필요한 것만 뽑아오는 것이죠.

필터링은 그 책들 중에서 특정 조건에 맞는 것만 다시 고르는 것입니다. 예를 들어 2020년 이후에 출판된 책만 고르는 것처럼요.

컬럼 선택과 필터링이 없다면 어떤 문제가 있을까요? 데이터가 클수록 메모리를 많이 사용합니다.

스무 개 열 전체를 들고 다니면 분석 속도도 느려지고 코드 가독성도 떨어집니다. 필터링 없이는 반복문을 돌려가며 조건을 일일이 확인해야 합니다.

수만 건의 데이터에서 특정 조건을 찾으려면 시간이 오래 걸립니다. 바로 이런 문제를 해결하기 위해 Pandas는 직관적인 선택과 필터링 문법을 제공합니다.

대괄호 안에 열 이름을 넣으면 해당 열만 추출됩니다. 여러 열을 선택하려면 리스트 형태로 열 이름들을 넣습니다.

필터링은 조건식을 대괄호 안에 넣으면 됩니다. 여러 조건을 조합할 때는 &(and)와 |(or)를 사용합니다.

위의 코드를 자세히 살펴보겠습니다. 먼저 df['이름']처럼 하나의 열을 선택하면 Series가 반환됩니다.

df[['이름', '연봉']]처럼 대괄호를 두 번 쓰면 DataFrame이 반환됩니다. 필터링에서 df['연봉'] >= 5000은 각 행에 대해 True/False를 반환하는 조건입니다.

이것을 df[] 안에 넣으면 True인 행만 추출됩니다. 실제 현업에서는 어떻게 활용할까요?

쇼핑몰에서 VIP 고객에게 쿠폰을 발송한다고 가정해봅시다. 총 구매금액이 100만원 이상이고 최근 30일 내 접속한 고객만 추출해야 합니다.

두 가지 조건을 &로 연결해서 한 줄로 필터링하면 됩니다. 결과 DataFrame에서 이메일 열만 선택해서 발송 대상 목록을 만들 수 있습니다.

하지만 주의할 점도 있습니다. 초보 개발자들이 흔히 하는 실수 중 하나는 여러 조건을 조합할 때 and나 or를 사용하는 것입니다.

파이썬 기본 문법에서는 and/or를 쓰지만, Pandas에서는 &와 |를 써야 합니다. 또한 각 조건을 괄호로 감싸주어야 합니다.

그렇지 않으면 연산자 우선순위 문제로 오류가 발생합니다. 다시 김개발 씨의 이야기로 돌아가 봅시다.

필터링 방법을 배운 김개발 씨는 VIP 고객 목록을 순식간에 추출했습니다. "이렇게 간단하다니!" 마케팅팀 담당자가 놀라며 물었습니다.

"혹시 서울 지역 고객만 따로 볼 수도 있나요?" 김개발 씨는 자신있게 대답합니다. "그럼요!"

실전 팁

💡 - 여러 조건을 조합할 때는 반드시 각 조건을 괄호로 감싸세요.

  • and/or 대신 &와 |를 사용해야 합니다.

5. head tail info describe

김개발 씨가 10만 건의 데이터를 불러왔습니다. 그런데 print(df)를 했더니 화면이 엄청난 양의 데이터로 가득 찹니다.

"이걸 다 볼 순 없잖아요." 박시니어 씨가 미소 짓습니다. "다 볼 필요 없어.

앞부분만 살짝 보면 돼."

headtail은 데이터의 처음과 끝 몇 줄만 보여주는 함수입니다. info는 각 열의 데이터 타입과 결측치 정보를 보여줍니다.

describe는 숫자 데이터의 통계 요약을 제공합니다. 이 네 가지 함수는 데이터를 처음 만났을 때 가장 먼저 실행하는 탐색 도구입니다.

다음 코드를 살펴봅시다.

import pandas as pd

df = pd.DataFrame({
    '이름': ['김개발', '이분석', '박시니어', '최주니어', '정데이터'],
    '나이': [28, 32, 35, 25, 29],
    '연봉': [4000, 5500, 7000, 3500, 4800]
})

# 처음 5행 보기 (기본값)
print(df.head())

# 처음 3행만 보기
print(df.head(3))

# 마지막 5행 보기
print(df.tail())

# 데이터프레임 정보 확인 (타입, 결측치 등)
print(df.info())

# 숫자 컬럼 통계 요약
print(df.describe())

김개발 씨가 처음으로 대용량 데이터를 다루게 되었습니다. 10만 건이 넘는 고객 데이터를 불러와서 print(df)를 실행했더니, 터미널이 멈춘 것처럼 데이터가 쏟아져 나옵니다.

스크롤을 아무리 올려도 끝이 없습니다. 박시니어 씨가 다가와 터미널을 멈추고 말합니다.

"데이터 탐색은 그렇게 하는 게 아니야." 그렇다면 데이터 탐색 함수들은 정확히 어떻게 사용할까요? 쉽게 비유하자면, 새 책을 읽기 전에 목차와 서문을 먼저 훑어보는 것과 같습니다.

head는 책의 첫 몇 페이지를 넘겨보는 것이고, tail은 마지막 몇 페이지를 확인하는 것입니다. info는 책의 목차를 보는 것이고, describe는 책의 핵심 내용 요약을 읽는 것입니다.

이런 탐색 함수 없이 데이터를 다루면 어떤 문제가 있을까요? 대용량 데이터 전체를 출력하면 시간도 오래 걸리고 시스템 리소스도 낭비됩니다.

무엇보다 수만 줄의 데이터를 눈으로 훑어보는 건 불가능합니다. 데이터의 구조를 파악하지 못하면 분석 방향을 잡기도 어렵습니다.

바로 이런 문제를 해결하기 위해 Pandas는 직관적인 탐색 함수들을 제공합니다. head와 tail은 기본적으로 5행을 보여주지만, 원하는 숫자를 인자로 전달할 수 있습니다.

info는 각 열의 이름, 데이터 개수, 결측치 여부, 데이터 타입을 한눈에 보여줍니다. describe는 숫자 열에 대해 평균, 표준편차, 최솟값, 최댓값, 사분위수 등 핵심 통계를 자동으로 계산해줍니다.

위의 코드를 자세히 살펴보겠습니다. head()는 인자 없이 호출하면 처음 5행을 반환합니다.

head(3)처럼 숫자를 넣으면 해당 개수만큼 반환합니다. tail()도 마찬가지입니다.

info()는 출력만 하고 반환값이 없는데, 열별로 Non-Null 개수가 표시되어 결측치가 있는지 바로 확인할 수 있습니다. describe()는 새로운 DataFrame을 반환하는데, count, mean, std, min, 25%, 50%, 75%, max 행으로 구성됩니다.

실제 현업에서는 어떻게 활용할까요? 새로운 데이터 파일을 받으면 가장 먼저 이 네 가지 함수를 실행합니다.

head로 데이터가 제대로 불러와졌는지 확인하고, info로 각 열의 타입을 확인합니다. 날짜가 문자열로 되어 있다면 변환이 필요하다는 걸 알 수 있습니다.

describe로 숫자 데이터의 범위를 확인하면 이상치가 있는지도 짐작할 수 있습니다. 하지만 주의할 점도 있습니다.

초보 개발자들이 흔히 하는 실수 중 하나는 head만 보고 전체 데이터를 판단하는 것입니다. 처음 5행이 깔끔해도 중간이나 끝에 문제가 있을 수 있습니다.

따라서 head와 tail을 함께 보고, info와 describe로 전체적인 상태를 파악하는 것이 좋습니다. 또한 describe는 숫자 열만 보여주므로 문자열 열은 별도로 확인해야 합니다.

다시 김개발 씨의 이야기로 돌아가 봅시다. 탐색 함수들을 배운 김개발 씨는 이제 새 데이터를 받으면 자동으로 네 가지 함수를 실행합니다.

"이 데이터 어때?" 동료가 물으면 자신있게 대답합니다. "일단 info랑 describe 돌려볼게."

실전 팁

💡 - 새 데이터를 받으면 head, info, describe를 습관처럼 실행하세요.

  • describe에서 count 값이 다른 열보다 적으면 결측치가 있다는 신호입니다.

6. 인덱스 설정과 활용

김개발 씨가 데이터 분석을 하다 보니 특정 고객 정보를 빠르게 찾아야 할 때가 많아졌습니다. 매번 조건으로 필터링하자니 번거롭습니다.

박시니어 씨가 힌트를 줍니다. "고객 ID를 인덱스로 설정해봐.

책에서 목차로 찾는 것처럼 빨라질 거야."

인덱스는 DataFrame의 각 행을 식별하는 라벨입니다. 마치 책의 목차나 사전의 색인처럼, 인덱스를 잘 설정하면 원하는 데이터를 빠르게 찾을 수 있습니다.

set_index로 인덱스를 설정하고, lociloc으로 데이터에 접근합니다.

다음 코드를 살펴봅시다.

import pandas as pd

df = pd.DataFrame({
    '고객ID': ['C001', 'C002', 'C003', 'C004'],
    '이름': ['김개발', '이분석', '박시니어', '최주니어'],
    '등급': ['VIP', '일반', 'VIP', '일반']
})

# 고객ID를 인덱스로 설정
df_indexed = df.set_index('고객ID')
print(df_indexed)

# loc: 라벨 기반 접근
print(df_indexed.loc['C001'])

# 여러 인덱스 선택
print(df_indexed.loc[['C001', 'C003']])

# iloc: 정수 위치 기반 접근
print(df_indexed.iloc[0])

# 인덱스 초기화 (원래대로)
df_reset = df_indexed.reset_index()

김개발 씨가 고객 관리 시스템을 개발하고 있습니다. 수시로 특정 고객 ID의 정보를 조회해야 하는데, 매번 df[df['고객ID'] == 'C001']처럼 필터링하자니 코드가 길고 번거롭습니다.

박시니어 씨가 더 좋은 방법을 알려줍니다. "인덱스를 활용해봐.

사전에서 단어 찾는 것처럼 빨라질 거야." 그렇다면 인덱스란 정확히 무엇일까요? 쉽게 비유하자면, 인덱스는 마치 도서관의 도서 분류 번호와 같습니다.

책이 아무렇게나 꽂혀 있으면 원하는 책을 찾기 어렵지만, 분류 번호가 붙어 있으면 빠르게 찾을 수 있습니다. DataFrame에서도 마찬가지입니다.

인덱스를 적절히 설정하면 원하는 행을 훨씬 빠르고 간편하게 찾을 수 있습니다. 인덱스를 제대로 활용하지 않으면 어떤 문제가 있을까요?

기본 인덱스는 0부터 시작하는 정수입니다. 이 상태에서 특정 고객을 찾으려면 항상 조건 필터링을 해야 합니다.

코드가 길어지고, 자주 조회하는 경우 성능도 떨어집니다. 또한 코드의 의도가 명확하지 않아 가독성도 나빠집니다.

바로 이런 문제를 해결하기 위해 set_index와 접근자 함수들이 제공됩니다. set_index로 특정 열을 인덱스로 설정하면, 해당 열의 값으로 행을 직접 찾을 수 있습니다.

loc은 라벨 기반 접근자로, 인덱스 값을 사용해 데이터를 찾습니다. iloc은 정수 위치 기반 접근자로, 0번째, 1번째처럼 순서로 접근합니다.

위의 코드를 자세히 살펴보겠습니다. 먼저 set_index('고객ID')로 고객ID 열을 인덱스로 설정합니다.

이제 이 열은 인덱스가 되어 일반 열에서 사라집니다. df_indexed.loc['C001']을 실행하면 C001 고객의 정보가 바로 조회됩니다.

여러 인덱스를 한 번에 조회하려면 리스트로 전달합니다. iloc[0]은 첫 번째 행을 반환합니다.

실제 현업에서는 어떻게 활용할까요? 시계열 데이터를 다룬다고 가정해봅시다.

날짜를 인덱스로 설정하면 df.loc['2024-01-01']처럼 특정 날짜의 데이터를 바로 조회할 수 있습니다. 더 나아가 df.loc['2024-01':'2024-03']처럼 범위로 슬라이싱하는 것도 가능합니다.

주식 데이터나 센서 데이터 분석에서 이런 패턴이 자주 사용됩니다. 하지만 주의할 점도 있습니다.

초보 개발자들이 흔히 하는 실수 중 하나는 loc과 iloc을 혼동하는 것입니다. loc은 라벨로 접근하고 iloc은 위치로 접근합니다.

인덱스가 정수라면 특히 헷갈리기 쉽습니다. 또한 set_index는 기본적으로 새로운 DataFrame을 반환하므로, 원본을 변경하려면 inplace=True 옵션을 사용하거나 결과를 다시 할당해야 합니다.

다시 김개발 씨의 이야기로 돌아가 봅시다. 인덱스 활용법을 배운 김개발 씨는 코드가 훨씬 깔끔해졌습니다.

동료가 "C001 고객 정보 좀 알려줘"라고 하면, df.loc['C001'] 한 줄로 바로 조회합니다. "이렇게 편할 수가!"

실전 팁

💡 - 자주 조회하는 열은 인덱스로 설정하면 편리합니다.

  • loc은 라벨, iloc은 위치입니다. 이 차이를 명확히 기억하세요.
  • reset_index()로 언제든 기본 인덱스로 되돌릴 수 있습니다.

이상으로 학습을 마칩니다. 위 내용을 직접 코드로 작성해보면서 익혀보세요!

#Python#Pandas#DataFrame#DataAnalysis#CSV#Excel#Python,Pandas

댓글 (0)

댓글을 작성하려면 로그인이 필요합니다.