❇️ 목적
1. 데이터 분석으로 비즈니스 문제를 어떻게 해결하는지 알아보기 위해 가상의 예를 이용합니다.
2. 코랩에서 판다스 데이터프레임으로 CSV 파일을 읽고 쓰는 방법에 대해 배웁니다.
✅ $ gdown.download
gdown 패키지는 구글 드라이브를 포함하여 웹에서 대용량 파일을 다운로드 할 수 있음.
# 구글 드라이브에서 다운로드
import gdown
gdown.download('https://bit.ly/3eecMKZ', '남산도서관 장서 대출목록 (2021년 04월).csv', quiet = False)
Downloading...
From: https://bit.ly/3eecMKZ
To: /content/남산도서관 장서 대출목록 (2021년 04월).csv
100%|██████████| 58.1M/58.1M [00:00<00:00, 180MB/s]
'남산도서관 장서 대출목록 (2021년 04월).csv'
✅ Encoding (형태:utf-8 or EUC-KR -> chardet으로 확인)
바로 다운로드 후, 불러오면 오류가 생깁니다.
# csv 파일 출력하기
with open('남산도서관 장서 대출목록 (2021년 04월).csv') as f:
print(f.readline())
---------------------------------------------------------------------------
UnicodeDecodeError Traceback (most recent call last)
/tmp/ipython-input-4075738087.py in <cell line: 0>()
2
3 with open('남산도서관 장서 대출목록 (2021년 04월).csv') as f:
----> 4 print(f.readline())
/usr/lib/python3.12/codecs.py in decode(self, input, final)
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xb9 in position 0: invalid start byte
chardet를 이용해 데이터의 타입을 확인할 수 있습니다.
▶️ UTF-8이면 오류가 나지 않지만, EUC-KR로 쓰여진것을 확인 했기 때문에 오류가 났던 것임을을 확인할 수 있습니다.
import chardet
with open('남산도서관 장서 대출목록 (2021년 04월).csv', mode = 'rb') as f:
d=f.readline()
print(chardet.detect(d))
{'encoding': 'EUC-KR', 'confidence': 0.99, 'language': 'Korean'}
▶️ open method에 encoding 매개변수안에 'EUC-KR'을 전달하여 출력하니 열 이름과 첫번째 줄이 출력 되는것을 확인 할 수 있습니다.
with open('남산도서관 장서 대출목록 (2021년 04월).csv', encoding = 'EUC-KR') as f:
print(f.readline())
print(f.readline())
번호,도서명,저자,출판사,발행년도,ISBN,세트 ISBN,부가기호,권,주제분류번호,도서권수,대출건수,등록일자,
"1","인공지능과 흙","김동훈 지음","민음사","2021","9788937444319","","","","","1","0","2021-03-19",
⏹️ NFD (Mac OS) VS NFC (Window & Linux)
MacOS에서 작업했던 파일을 window나 Linux에서 불러오면 아래 주석과 같이 불러와 지는 경우가 있습니다.
그런 경우 아래처럼 파일 포맷을 변경하여 불러올 수 있습니다.
# NFD (ex. ㅎㅗㄴㄱㅗㅇ) -> NFC (ex. 혼공)
import os
import glob
import unicodedata
for filename in glob.glob('*.csv'):
nfc_filename = unicodedata.normalize('NFC', filename)
os.rename(filename, nfc_filename)
✅ 데이터프레임 다루기: pandas
▶️ pandas.read_csv: Tabular data: 표형식 데이터을 읽는 pandas 패키지의 method
- read_csv(): 같은 열에 어떤 종류의 데이터가 저장되어 있는지 자동으로 파악
- 메모리를 효율적으로 사용하기 위해 CSV 파일을 나눠 읽음
- 이때, 자동으로 파악한 데이터 타입이 달라지면 경고가 발생
import pandas as pd
df = pd.read_csv('남산도서관 장서 대출목록 (2021년 04월).csv', encoding = 'EUC-KR')
/tmp/ipython-input-3429453271.py:3: DtypeWarning: Columns (5,6,9) have mixed types. Specify dtype option on import or set low_memory=False.
df = pd.read_csv('남산도서관 장서 대출목록 (2021년 04월).csv', encoding = 'EUC-KR')
▶️ low_memory = False를 사용해서 나눠 읽지 않고 한번에 읽도록 함.
# low_memory = False -> 한번에 나눠 읽기
df = pd.read_csv('남산도서관 장서 대출목록 (2021년 04월).csv', encoding = 'EUC-KR', low_memory = False)
▶️ dtype = {''}
- 데이터의 크기가 큰 경우 low_memory = False 면 memory가 다운됨
- 해당하는 데이터를 dtype 매개 변수를 이용해 data type을 정해줄 수 있음.
df = pd.read_csv('남산도서관 장서 대출목록 (2021년 04월).csv', encoding = 'euc-kr',
dtype = {'ISBN': str, '세트 ISBN': str, '주제분류번호': str})
df.head()
# 마지막에 ,를 인식해서 새로운 칼럼이 하나 더 생김.
# 이는 나중에 처리해야 함.

▶️ 첫 행이 열 이름이 없는 경우라면
- header = None
- names = {'column name'}
▶️ df.to_csv: default로 UTF-8 형식으로 데이터를 CSV 형태로 저장합니다.
출력의 맨 앞에 0,1 이 또 생겨 있는 것을 확인했다.
df.to_csv('ns_202104.csv')
with open('ns_202104.csv') as f:
for i in range(3):
print(f.readline(), end = '')
,번호,도서명,저자,출판사,발행년도,ISBN,세트 ISBN,부가기호,권,주제분류번호,도서권수,대출건수,등록일자,Unnamed: 13
0,1,인공지능과 흙,김동훈 지음,민음사,2021,9788937444319,,,,,1,0,2021-03-19,
1,2,가짜 행복 권하는 사회,김태형 지음,갈매나무,2021,9791190123969,,,,,1,0,2021-03-19,
read_csv로 저장한 파일을 data frame 형태로 불러와서 보면 앞에 index 값과 똑같이 "Unammed:0" 으로 칼럼이 하나 더 생겼다.
ns_df = pd.read_csv('ns_202104.csv', low_memory = False)
ns_df.head()

▶️ index_col: Index가 이미 파일 안에 있다는 것을 알려기 위해 사용 => 인덱스 칼럼을 따로 또 저장하지 않게 할 수 있다.
ns_df = pd.read_csv('ns_202104.csv', index_col = 0 ,low_memory = False)
ns_df.head()

▶️ to_csv의 index = False: 저장 할 때 부터 인덱스를 저장하지 않음. => 따로 불러올 때, 인덱스를 없애지 않아도 됨.
ns_df = df.to_csv('ns_202104.csv', index = False)
with open('ns_202104.csv') as f:
for i in range(3):
print(f.readline())
번호,도서명,저자,출판사,발행년도,ISBN,세트 ISBN,부가기호,권,주제분류번호,도서권수,대출건수,등록일자,Unnamed: 13
1,인공지능과 흙,김동훈 지음,민음사,2021,9788937444319,,,,,1,0,2021-03-19,
2,가짜 행복 권하는 사회,김태형 지음,갈매나무,2021,9791190123969,,,,,1,0,2021-03-19,
⏹️ to_excel & xlswriter
ns_df.to_excel('ns_202104', index = False)
위 형태로 엑셀로도 저장 가능
판다스는 엑셀 파일을 만들 때, 기본적으로 openpyxl package를 사용함. 이는 한글에서 오류를 유발하기 때문에, xlsxwriter 패키지를 사용 to_excel 사용시 engine 매개변수를 'xlswriter'로 지정해주면 됨.
!pip install xlsxwriter
ns_df.to_excel('ns_202104', index = False, engine = 'xlsxwriter')
# 혼자공부하는 데이터 분석 with 파이썬 (저자: 박해선)을 보고 공부를 위해 작성하였습니다.
'프로그래밍 > Python & 데이터 분석' 카테고리의 다른 글
| [데이터 분석] Chapter 02-1. 데이터 수집하기 (API 사용하기) (0) | 2026.01.25 |
|---|