Fullstack 66

heo4·2026년 7월 20일

Fullstack

목록 보기
21/71

풀스택

Pandas 실전 활용 - 외부 데이터 불러오기

국비과정에서 배운 Pandas의 외부 데이터 로딩과 초기 탐색(EDA) 방법을 정리했다. read_csv()를 중심으로, 데이터 확인 메소드와 열/범위 선택 방법까지 다룬다.

1. 파일 형식별 불러오기 도구 (IO Tools)

Pandas는 거의 모든 형태의 데이터를 읽을 수 있다. 상황에 맞는 메소드를 고르면 된다.

함수대상 파일 형식설명 및 용도
read_csv().csv, .txt가장 많이 쓰이는 방식. 콤마(,)나 탭으로 구분된 텍스트 데이터 로드
read_excel().xls, .xlsx엑셀 파일을 불러올 때 사용
read_json().json웹 서버와 데이터를 주고받을 때 쓰는 JSON을 표로 변환
read_html()웹 페이지 (URL)웹 페이지 내의 <table> 태그를 찾아 자동으로 표를 추출

2. read_csv() 완벽 정복하기

가장 자주 쓰이고, 시험에서도 핵심적으로 다뤄지는 메소드다.

주요 파라미터(옵션)

  • filepath: 파일 경로 혹은 URL
  • encoding: 한글이 깨지면 'cp949' 또는 'utf-8'을 지정
  • sep: 구분자 (기본값은 쉼표 ,)
  • index_col: 특정 열을 인덱스로 사용하고 싶을 때 지정

3. 데이터 분석을 위한 주요 메소드 (EDA)

데이터 분석 초기 단계인 EDA(Exploratory Data Analysis, 탐색적 데이터 분석)에서 데이터의 외형과 내부 정보를 파악할 때 쓰는 명령어들이다.

분류명령어기능 설명주요 확인 사항
데이터 확인df.head(n)상위 n개 행 반환데이터의 구성 형식 및 실제 값 형태
데이터 확인df.tail(n)하위 n개 행 반환데이터 로드 완료 여부 및 마지막 부분 형식
데이터 구조df.shape행(Row)과 열(Column) 수 반환전체 데이터의 규모(차원) 파악
데이터 구조df.columns모든 열 이름 반환분석에 사용할 특성(Feature) 명칭 확인
데이터 정보df.info()인덱스, 컬럼명, 데이터 타입, 결측치 정보 출력결측치(Null) 존재 여부 및 타입 일치 확인
기술 통계df.describe()수치형 데이터의 주요 통계량 요약 출력평균, 표준편차, 사분위수, 최댓값/최솟값 확인

4. 예제

예제 1) CSV 데이터 불러오기

import pandas as pd

# 1. CSV 데이터 불러오기
df = pd.read_csv('./Clean_Dataset.csv')
df

예제 2) 불러온 데이터 분석하기

import pandas as pd

# 1. CSV 파일 불러오기
# index_col=0 은 파일의 첫 번째 열을 인덱스로 지정하겠다는 의미
df = pd.read_csv('./Clean_Dataset.csv', index_col=0)

# 2. 데이터 확인 (상위 5개 행)
print("--- 상위 5개 데이터 (head) ---")
print(df.head())

# 3. 데이터 확인 (하위 3개 행)
print("\n--- 하위 3개 데이터 (tail) ---")
print(df.tail(3))

# 4. 데이터 구조 확인 (행, 열)
print("\n--- 데이터 구조 (shape) ---")
print(df.shape)

# 5. 열 이름 확인
print("\n--- 열 목록 (columns) ---")
print(df.columns)

# 6. 데이터 정보 확인 (타입 및 결측치)
print("\n--- 데이터 정보 (info) ---")
df.info()

# 7. 기술 통계량 확인
print("\n--- 기술 통계 (describe) ---")
print(df.describe())

새로운 데이터를 받으면 보통 head() → shape → columns → info() → describe() 순서로 훑어보면서 데이터의 전체 그림을 파악한다.

예제 3) 열(Column)로 데이터 선택

특정 항목(Feature)만 뽑고 싶을 땐 대괄호([]) 안에 컬럼명을 넣는다.

import pandas as pd

df = pd.read_csv('./Clean_Dataset.csv')

# 2. 단일 열 선택 (Series 형태로 반환)
airlines = df['airline']
print("--- 단일 열 선택 (airline) ---")
print(airlines.head())

# 3. 여러 열 선택 (DataFrame 형태로 반환)
subset = df[['airline', 'source_city', 'price']]
print("\n--- 여러 열 선택 (airline, source_city, price) ---")
print(subset.head())

⚠️ 여러 열을 선택할 때는 대괄호를 두 번([[ ]]) 써야 한다. 안쪽 ['airline', 'price']는 선택할 열들의 "리스트"이고, 바깥 []는 그 리스트로 DataFrame에서 선택하는 문법이다.

예제 4) 특정 열과 범위 선택

원하는 영역을 행렬 형태로 잘라낼 때는 loc(레이블 기반)와 iloc(정수 인덱스 기반)의 차이를 아는 게 핵심이다.

import pandas as pd

df = pd.read_csv('./Clean_Dataset.csv')

# 0번부터 5번 인덱스 행까지, 'airline'부터 'source_city' 컬럼까지 선택
# loc는 마지막 범위(5번 행, source_city 열)를 포함한다
print("--- loc를 이용한 범위 선택 ---")
print(df.loc[0:5, 'airline':'source_city'])

# 0~4번 행(5번 제외), 0~2번 열(3번 제외) 선택
# iloc는 파이썬 슬라이싱 규칙대로 마지막 인덱스를 포함하지 않는다
print("\n--- iloc를 이용한 범위 선택 ---")
print(df.iloc[0:5, 0:3])

5. 연습문제

문제 1

항공권 데이터의 전체 규모를 파악하고, 필요한 열만 골라내기.

  • Clean_Dataset.csv를 불러와서 전체 행/열 개수 출력
  • '항공사(airline)'와 '항공권 가격(price)' 두 열만 선택해서 df_price에 저장
  • df_price의 상위 10개 데이터 출력
정답 코드 보기
import pandas as pd

df = pd.read_csv('Clean_Dataset.csv')

print(f"행과 열의 개수: {df.shape}")

df_price = df[['airline', 'price']]

print(df_price.head(10))

문제 2

특정 구간의 노선 정보(출발지~도착지)를 집중적으로 확인하기.

  • loc로 인덱스 50번부터 60번까지 추출
  • 컬럼은 '출발 도시(source_city)'부터 '도착 도시(destination_city)'까지만 선택
  • 추출한 결과의 info()로 몇 개의 데이터가 선택되었는지 확인
정답 코드 보기
import pandas as pd

df = pd.read_csv('Clean_Dataset.csv')

# 50번부터 60번까지의 정보
print(df.loc[50:60, 'source_city':'destination_city'].info())

# 50번부터 60번까지의 데이터 개수
print(df.loc[50:60, 'source_city':'destination_city'].shape[0])

마무리

  • 새로운 CSV를 받으면 head() → shape → columns → info() → describe() 순서로 먼저 훑어보는 습관이 EDA의 기본이다.
  • 열 선택 시 단일 열은 df['컬럼'](Series), 여러 열은 df[['컬럼1', '컬럼2']](DataFrame)로 반환 타입이 다르다는 점을 기억하자.
  • loc는 끝 범위를 포함하고 iloc는 끝 범위를 제외한다는 규칙은 앞선 Pandas 기초 편에 이어 계속 나오는 핵심 포인트다.

Pandas 실전 활용 - 필요한 데이터로 가공하기

국비과정에서 배운 Pandas 데이터 가공을 정리했다. 열 추가/삽입, 이름 변경, 정렬, 행·열 삭제까지 원본 데이터를 분석 목적에 맞게 다듬는 방법들이다.

1. 가공을 위한 메소드

기능메소드/문법설명
열 추가(계산)df['새컬럼'] = 연산기존 컬럼을 이용해 새 데이터를 계산해서 추가
열 삽입df.insert(위치, 이름, 값)원하는 특정 위치(순서)에 컬럼을 끼워 넣기
삭제df.drop()행(Row)이나 열(Column) 삭제. axis 설정이 핵심
이름 변경df.rename()컬럼 이름을 더 이해하기 쉬운 명칭으로 변경
정렬df.sort_values()특정 기준으로 오름차순/내림차순 정렬

2. 예제

예제 1) 새로운 데이터 만들기

df['새이름'] = 계산식 형태로 기존 컬럼을 계산해서 새 컬럼을 만들 수 있다.

# 항공권 가격(price)이 2배로 올랐다고 가정
import pandas as pd

df = pd.read_csv('./Clean_Dataset.csv')

# 'price2'라는 이름으로 2배 가격 열 추가
df['price2'] = df['price'] * 2
print(df[['price', 'price2']].head())

예제 2) 원하는 위치에 컬럼 추가

df.insert(위치번호, '열이름', 값)으로 원하는 순서에 컬럼을 끼워 넣을 수 있다. 위치 번호는 0부터 시작한다.

import pandas as pd

df = pd.read_csv('./Clean_Dataset.csv')

# 맨 앞(0번 인덱스)에 '국가' 정보를 넣고 싶을 때
df.insert(0, 'country', 'India')
print(df.head(3))

예제 3) 컬럼명 변경

df.rename(columns={'옛이름': '새이름'})처럼 딕셔너리 구조로 이름을 바꾼다.

import pandas as pd

df = pd.read_csv("Clean_Dataset.csv")
df2 = df.rename(columns={"airline": "항공사"})

print("=== 원본 ===")
print(df.columns)
print("=== 수정본 ===")
print(df2.columns)

💡 rename()은 기본적으로 원본을 바꾸지 않고 새 DataFrame을 반환한다. 원본 자체를 바꾸려면 inplace=True 옵션을 쓰거나, 위 예제처럼 df2 = df.rename(...)으로 다시 할당해야 한다.

예제 4) 데이터 정렬

  • by: 기준이 될 컬럼명
  • ascending: True(오름차순, 기본값) / False(내림차순, 큰 것부터)
import pandas as pd

df = pd.read_csv("Clean_Dataset.csv")
df_sorted = df.sort_values(by="price", ascending=False)

print(df_sorted[['airline', 'price']])

예제 5) 행 혹은 열 삭제

  • axis=1: 세로 줄(열, Column) 삭제
  • axis=0: 가로 줄(행, Row) 삭제 (기본값)
import pandas as pd

df = pd.read_csv("Clean_Dataset.csv")
df['price2'] = df['price'] * 2

# 열 삭제 (axis=1)
df = df.drop(['price2'], axis=1)
print(df.columns)
import pandas as pd

df = pd.read_csv("Clean_Dataset.csv")
print(df.head())

# 3번째 행을 제거 (axis 기본값 0)
df = df.drop(3)
print(df.head())

⚠️ axis=1은 열, axis=0은 행이라는 게 계속 헷갈리는 부분이다. "axis=1이면 옆으로(가로) 지운다"고 외우면 좀 더 기억하기 쉽다.


3. 연습문제

문제 1

항공사 세금 정책 변경으로 모든 항공권 가격을 5% 인상하고, 컬럼 이름도 더 명확하게 바꾸기.

  • 기존 price 컬럼에 1.05를 곱해서 final_price라는 새 열 만들기
  • airline 컬럼 이름을 brand로 변경하기
  • 위 작업 완료 후 상위 5개 데이터 출력하기
정답 코드 보기
import pandas as pd

df = pd.read_csv('Clean_Dataset.csv')
df['final_price'] = df['price'] * 1.05
df = df.rename(columns={'airline': 'brand'})
df.head()

문제 2

불필요한 번호 컬럼을 지우고, 비행 시간이 긴 순서대로 데이터를 정리하기.

  • 맨 앞의 불필요한 인덱스 컬럼 Unnamed: 0 삭제하기 (axis 설정 주의)
  • 데이터 맨 앞(0번 위치)에 is_filtered 컬럼을 만들고 모든 값을 True로 채우기 (df.insert 활용)
  • 전체 데이터를 비행 시간(duration)이 긴 순서(내림차순)로 정렬해서 출력하기
정답 코드 보기
import pandas as pd

df = pd.read_csv('Clean_Dataset.csv')

# 1. 불필요한 인덱스 컬럼 삭제 (열 삭제 → axis=1)
df = df.drop(['Unnamed: 0'], axis=1)

# 2. 맨 앞(0번 위치)에 is_filtered 컬럼 추가, 값은 모두 True
df.insert(0, 'is_filtered', True)

# 3. 비행 시간(duration) 내림차순 정렬
df_sorted = df.sort_values(by='duration', ascending=False)

print(df_sorted.head())

마무리

  • 열 추가는 df['새컬럼'] = 계산식, 원하는 위치에 넣고 싶으면 df.insert(위치, 이름, 값)으로 구분해서 기억하자.
  • drop(), sort_values() 모두 기본적으로 원본을 바꾸지 않고 새 결과를 반환하므로, 결과를 유지하려면 변수에 다시 할당(df = df.drop(...))하거나 inplace=True를 써야 한다.
  • axis=0(행) / axis=1(열) 구분은 이후 통계 연산(sum, mean 등)에서도 계속 나오는 개념이라 확실히 익혀두면 좋다.

0개의 댓글