[Python 100일 챌린지] Day 64 - Pandas 데이터 로딩
[Python 100일 챌린지] Day 64 - Pandas 데이터 로딩
실제 데이터를 불러와 봅시다! 📁
CSV, Excel 파일을 Pandas로 읽으면 단 한 줄이면 돼요! 실무에서 가장 많이 쓰는 데이터 로딩 기법을 배워봅시다! 💪
(25분 완독 ⭐⭐)
🎯 오늘의 학습 목표
📚 사전 지식
- Day 63: Pandas 기초 - Series와 DataFrame
- Day 44: CSV 파일 처리 - CSV 기초
🎯 학습 목표 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())
📝 오늘 배운 내용 정리
- CSV 읽기:
pd.read_csv()+ encoding, sep, usecols 옵션 - CSV 쓰기:
df.to_csv()+ index=False 중요! - Excel 읽기/쓰기:
pd.read_excel(),df.to_excel() - 대용량 파일: chunksize로 분할 처리
- 다양한 형식: JSON, 클립보드, HTML 테이블
🔗 관련 자료
📚 이전 학습
Day 63: Pandas 기초 ⭐⭐
어제는 Series와 DataFrame의 기본을 배웠어요!
📚 다음 학습
Day 65: Pandas 데이터 조작 ⭐⭐
내일은 필터링, 정렬, 열 추가/삭제를 배워요!
“데이터 로딩이 분석의 시작입니다!” 📁
Day 64/100 Phase 7: 데이터 분석 기초 #100DaysOfPython
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.
