포스트

[Python 100일 챌린지] Day 64 - Pandas 데이터 로딩

[Python 100일 챌린지] Day 64 - Pandas 데이터 로딩

실제 데이터를 불러와 봅시다! 📁

CSV, Excel 파일을 Pandas로 읽으면 단 한 줄이면 돼요! 실무에서 가장 많이 쓰는 데이터 로딩 기법을 배워봅시다! 💪

(25분 완독 ⭐⭐)

🎯 오늘의 학습 목표

📚 사전 지식


🎯 학습 목표 1: CSV 파일 읽고 쓰기

1.1 CSV 파일 읽기

1
2
3
4
5
6
7
8
9
import pandas as pd

# 기본 읽기
df = pd.read_csv('data.csv')
print(df.head())

# URL에서 직접 읽기
url = 'https://example.com/data.csv'
df = pd.read_csv(url)

1.2 CSV 읽기 옵션

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import pandas as pd

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

# 구분자 지정
df = pd.read_csv('data.tsv', sep='\t')      # 탭 구분
df = pd.read_csv('data.txt', sep='|')       # 파이프 구분

# 헤더 없는 파일
df = pd.read_csv('no_header.csv', header=None)
df.columns = ['col1', 'col2', 'col3']       # 열 이름 지정

# 특정 열만 읽기
df = pd.read_csv('data.csv', usecols=['이름', '나이'])

# 인덱스 열 지정
df = pd.read_csv('data.csv', index_col='id')

# 처음 n행만 읽기 (대용량 파일 미리보기)
df = pd.read_csv('big_data.csv', nrows=1000)

1.3 CSV 파일 쓰기

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import pandas as pd

df = pd.DataFrame({
    '이름': ['철수', '영희', '민수'],
    '나이': [20, 22, 21],
    '점수': [85, 90, 78]
})

# 기본 저장
df.to_csv('output.csv')

# 인덱스 제외
df.to_csv('output.csv', index=False)

# 인코딩 지정
df.to_csv('output.csv', index=False, encoding='utf-8-sig')

# 특정 열만 저장
df.to_csv('output.csv', columns=['이름', '점수'], index=False)

🎯 학습 목표 2: Excel 파일 읽고 쓰기

2.1 Excel 설치 준비

1
2
3
# Excel 읽기/쓰기에 필요한 패키지
pip install openpyxl   # xlsx 파일용
pip install xlrd       # xls 파일용 (구버전)

2.2 Excel 파일 읽기

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import pandas as pd

# 기본 읽기
df = pd.read_excel('data.xlsx')

# 특정 시트 읽기
df = pd.read_excel('data.xlsx', sheet_name='Sheet2')
df = pd.read_excel('data.xlsx', sheet_name=0)  # 첫 번째 시트

# 모든 시트 읽기 (딕셔너리 반환)
all_sheets = pd.read_excel('data.xlsx', sheet_name=None)
print(all_sheets.keys())  # 시트 이름들
df1 = all_sheets['Sheet1']

# 범위 지정
df = pd.read_excel('data.xlsx',
                   skiprows=2,        # 처음 2행 건너뛰기
                   usecols='A:D')     # A~D열만

2.3 Excel 파일 쓰기

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import pandas as pd

df = pd.DataFrame({
    '이름': ['철수', '영희'],
    '점수': [85, 90]
})

# 기본 저장
df.to_excel('output.xlsx', index=False)

# 시트 이름 지정
df.to_excel('output.xlsx', sheet_name='성적표', index=False)

# 여러 시트에 저장
with pd.ExcelWriter('multi_sheet.xlsx') as writer:
    df1.to_excel(writer, sheet_name='1반', index=False)
    df2.to_excel(writer, sheet_name='2반', index=False)

🎯 학습 목표 3: 데이터 로딩 옵션 활용하기

3.1 데이터 타입 지정

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import pandas as pd

# 열별 타입 지정
df = pd.read_csv('data.csv', dtype={
    '학번': str,        # 문자열로 (앞의 0 보존)
    '나이': int,
    '평균': float
})

# 날짜 파싱
df = pd.read_csv('data.csv', parse_dates=['날짜'])
df = pd.read_csv('data.csv',
                 parse_dates=['날짜'],
                 date_format='%Y-%m-%d')

3.2 결측값 처리

1
2
3
4
5
6
7
import pandas as pd

# 특정 값을 결측값으로 인식
df = pd.read_csv('data.csv', na_values=['NA', 'N/A', '-', ''])

# 결측값 있는 행 건너뛰기
df = pd.read_csv('data.csv', na_filter=True)

3.3 대용량 파일 처리

1
2
3
4
5
6
7
8
9
import pandas as pd

# 청크 단위로 읽기
chunk_size = 10000

for chunk in pd.read_csv('big_data.csv', chunksize=chunk_size):
    # 각 청크 처리
    print(f"처리 중: {len(chunk)}")
    # 필요한 처리 수행

🎯 학습 목표 4: 다양한 형식 다루기

4.1 JSON 파일

1
2
3
4
5
6
7
import pandas as pd

# JSON 읽기
df = pd.read_json('data.json')

# JSON 쓰기
df.to_json('output.json', orient='records', force_ascii=False)

4.2 클립보드 (엑셀 복사/붙여넣기)

1
2
3
4
5
6
7
import pandas as pd

# 클립보드에서 읽기 (엑셀에서 복사 후)
df = pd.read_clipboard()

# 클립보드로 복사
df.to_clipboard(index=False)

4.3 웹 테이블

1
2
3
4
5
6
import pandas as pd

# HTML 테이블 읽기
url = 'https://example.com/table.html'
tables = pd.read_html(url)  # 리스트로 반환
df = tables[0]  # 첫 번째 테이블

💡 실전 팁 & 주의사항

✅ 인코딩 문제 해결

1
2
3
4
5
6
7
8
9
10
11
12
import pandas as pd

# 한글 CSV 파일 인코딩 시도 순서
encodings = ['utf-8', 'cp949', 'euc-kr', 'utf-8-sig']

for encoding in encodings:
    try:
        df = pd.read_csv('korean.csv', encoding=encoding)
        print(f"성공: {encoding}")
        break
    except UnicodeDecodeError:
        print(f"실패: {encoding}")

⚠️ 주의사항

1
2
3
4
5
6
7
# 1. 숫자로 된 ID가 정수로 변환되면 앞의 0이 사라짐
# 해결: dtype={'학번': str}

# 2. 대용량 파일은 메모리 부족 발생 가능
# 해결: chunksize 사용 또는 필요한 열만 읽기

# 3. Excel 저장 시 index=False 잊지 말기

🧪 연습 문제

문제 1: CSV 파일 만들고 읽기

학생 5명의 데이터(이름, 학년, 국어, 영어, 수학 점수)를 DataFrame으로 만들고, CSV로 저장한 뒤 다시 읽어보세요.

정답 코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import pandas as pd

# DataFrame 생성
df = pd.DataFrame({
    '이름': ['철수', '영희', '민수', '지영', '현수'],
    '학년': [1, 2, 1, 3, 2],
    '국어': [85, 90, 78, 92, 88],
    '영어': [90, 85, 92, 88, 95],
    '수학': [78, 88, 85, 90, 82]
})

# CSV로 저장
df.to_csv('students.csv', index=False, encoding='utf-8-sig')
print("저장 완료!")

# 다시 읽기
df_loaded = pd.read_csv('students.csv')
print(df_loaded)
print(df_loaded.info())

📝 오늘 배운 내용 정리

  1. CSV 읽기: pd.read_csv() + encoding, sep, usecols 옵션
  2. CSV 쓰기: df.to_csv() + index=False 중요!
  3. Excel 읽기/쓰기: pd.read_excel(), df.to_excel()
  4. 대용량 파일: chunksize로 분할 처리
  5. 다양한 형식: JSON, 클립보드, HTML 테이블

🔗 관련 자료


📚 이전 학습

Day 63: Pandas 기초 ⭐⭐

어제는 Series와 DataFrame의 기본을 배웠어요!

📚 다음 학습

Day 65: Pandas 데이터 조작 ⭐⭐

내일은 필터링, 정렬, 열 추가/삭제를 배워요!


“데이터 로딩이 분석의 시작입니다!” 📁

Day 64/100 Phase 7: 데이터 분석 기초 #100DaysOfPython
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.