풀스택 백엔드 2026.07.21

syyu21b·2026년 7월 21일

풀스택 - 백엔드

목록 보기
47/49
post-thumbnail

[SECTION 13. 파이썬 기초 문법 - Pandas 실전 활용: 외부 데이터 불러오기]

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(Exploratory Data Analysis: 탐색적 데이터 분석)에서 데이터의 외형과 내부 정보를 파악하기 위해 사용하는 주요 명령어입니다.
분류명령어기능 설명주요 확인 사항
데이터 확인df.head(n)데이터프레임의 상위 n개 행을 반환합니다.데이터의 구성 형식 및 실제 값의 형태
데이터 확인df.tail(n)데이터프레임의 하위 n개 행을 반환합니다.데이터 로드 완료 여부 및 마지막 부분의 형식
데이터 구조df.shape데이터프레임의 행(Row)과 열(Column) 수를 반환합니다.전체 데이터의 규모(차원) 파악
데이터 구조df.columns데이터프레임에 포함된 모든 열 이름을 반환합니다.분석에 사용할 특성(Feature) 명칭 확인
데이터 정보df.info()인덱스, 컬럼명, 데이터 타입, 결측치 정보를 출력합니다.결측치(Null) 존재 여부 및 데이터 타입 일치 확인
기술 통계df.describe()수치형 데이터의 주요 통계량을 요약하여 출력합니다.평균, 표준편차, 사분위수, 최댓값/최솟값 확인

3. 예제

예제 3-1. Clean_Dataset.csv 데이터 불러오기

Clean_Dataset.csv

  • 이 데이터는 보통 항공권 가격이나 차량 데이터 분석용으로 쓰이는 정제된 데이터입니다.
import pandas as pd

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

예제 3-2. Clean_Dataset.csv 분석하기

  • 다양한 메소드를 통해 불러온 파일의 내용을 파악해 봅시다.
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())

예제 3-3. Clean_Dataset.csv 에서 열(Column)로 데이터 선택

  • 특정 항목(Feature)의 데이터만 추출할 때 사용합니다. 대괄호([]) 안에 컬럼명을 입력합니다.
import pandas as pd

# 1. CSV 파일 불러오기
df = pd.read_csv('./Clean_Dataset.csv')

# 2. 단일 열 선택 (Series 형태로 반환)
# 항공사(airline) 정보만 추출
airlines = df['airline']
print("--- 단일 열 선택 (airline) ---")
print(airlines.head())

# 3. 여러 열 선택 (DataFrame 형태로 반환)
# 항공사(airline), 출발 도시(source_city), 가격(price) 정보 추출
subset = df[['airline', 'source_city', 'price']]
print("\n--- 여러 열 선택 (airline, source_city, price) ---")
print(subset.head())
  • 주의 사항: 여러 열을 선택할 때는 대괄호를 두 번 [[ ]] 사용해야 합니다. (내부의 ['airline', 'price']는 선택할 열들의 '리스트'를 의미합니다.)

예제 3-4. Clean_Dataset.csv 에서 특정 열과 범위 선택

  • 원하는 영역을 행렬 형태로 잘라낼 때 사용합니다. 레이블 기반의 loc와 정수 인덱스 기반의 iloc의 차이점을 익히는 것이 핵심입니다.
import pandas as pd

# 1. CSV 파일 불러오기
df = pd.read_csv('./Clean_Dataset.csv')

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

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

4. 연습 문제

Q1. 항공권 데이터의 전체적인 규모를 파악하고, 분석에 필요한 핵심 정보만 골라내려고 합니다.

  • Clean_Dataset.csv 파일을 불러와서 데이터프레임의 전체 행(Row)과 열(Column)의 개수를 출력하세요.
  • 전체 데이터에서 '항공사(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))

Q2. 특정 구간의 노선 정보(출발지~도착지)를 집중적으로 확인해야 합니다.

  • 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])
    

[SECTION 14. 파이썬 기초 문법 - Pandas 실전 활용: 필요 데이터 변경하기]

1. 가공을 위한 메소드

  • 원본 데이터를 분석 목적에 맞게 변경하기 위한 메소드를 살펴 봅시다.
기능메소드/문법설명
열 추가(계산)df['새컬럼'] = 연산기존 컬럼을 이용해 새로운 데이터를 계산해서 추가합니다.
열 삽입df.insert(위치, 이름, 값)내가 원하는 특정 위치(순서)에 컬럼을 끼워 넣습니다.
삭제df.drop()행(Row)이나 열(Column)을 삭제합니다. axis 설정이 핵심입니다.
이름 변경df.rename()컬럼의 이름을 더 이해하기 쉬운 명칭으로 바꿉니다.
정렬df.sort_values()특정 기준을 정해 데이터를 오름차순/내림차순으로 줄 세웁니다.

2. 예제

예제 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-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))

예제 2-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)

예제 2-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']])

예제 2-5. 행 혹은 열 삭제

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

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

df['price2'] = df['price'] * 2

df = df.drop(['price2'], axis=1)

print(df.columns)
import pandas as pd

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

print(df.head())

# 3번째 행을 제거
df = df.drop(3)

print(df.head())

3. 연습 문제

Q1. 항공사에서 세금 정책이 변경되어 모든 항공권 가격을 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()

Q2. 데이터 분석을 시작하기 전, 불필요한 번호를 지우고 비행 시간이 긴 순서대로 데이터를 정리하라는 지시를 받았습니다.

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

0개의 댓글