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, 178MB/s]
'남산도서관 장서 대출목록 (2021년 04월).csv'
with open('남산도서관 장서 대출목록 (2021년 04월).csv') as f:
print(f.readline())
#unicodedecodeerror가 나게 된다.
--------------------------------------------------------------------------- UnicodeDecodeError Traceback (most recent call last) <ipython-input-7-8ccda7bd1ec6> in <module> 1 with open('남산도서관 장서 대출목록 (2021년 04월).csv') as f: ----> 2 print(f.readline()) /usr/lib/python3.9/codecs.py in decode(self, input, final) 320 # decode input (taking the buffer into account) 321 data = self.buffer + input --> 322 (result, consumed) = self._buffer_decode(data, self.errors, final) 323 # keep undecoded input until the next call 324 self.buffer = data[consumed:] UnicodeDecodeError: 'utf-8' codec can't decode byte 0xb9 in position 0: invalid start byte
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'}
with open('남산도서관 장서 대출목록 (2021년 04월).csv',encoding = 'EUC-KR') as f: #encoding 형식을 EUC-KR로 바꾸기, default = utf-8
print(f.readline())
print(f.readline())
번호,도서명,저자,출판사,발행년도,ISBN,세트 ISBN,부가기호,권,주제분류번호,도서권수,대출건수,등록일자, "1","인공지능과 흙","김동훈 지음","민음사","2021","9788937444319","","","","","1","0","2021-03-19",
import pandas as pd
df = pd.read_csv('남산도서관 장서 대출목록 (2021년 04월).csv',encoding = 'EUC-KR')
#데이터 타입이 달라져 DtypeWarning이 발생생
/usr/local/lib/python3.9/dist-packages/IPython/core/interactiveshell.py:3326: DtypeWarning: Columns (5,6,9) have mixed types.Specify dtype option on import or set low_memory=False. exec(code_obj, self.user_global_ns, self.user_ns)
import pandas as pd
df = pd.read_csv('남산도서관 장서 대출목록 (2021년 04월).csv',encoding = 'EUC-KR',low_memory = False)
df.head() # 앞의 5줄
번호 | 도서명 | 저자 | 출판사 | 발행년도 | ISBN | 세트 ISBN | 부가기호 | 권 | 주제분류번호 | 도서권수 | 대출건수 | 등록일자 | Unnamed: 13 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 1 | 인공지능과 흙 | 김동훈 지음 | 민음사 | 2021 | 9788937444319 | NaN | NaN | NaN | NaN | 1 | 0 | 2021-03-19 | NaN |
1 | 2 | 가짜 행복 권하는 사회 | 김태형 지음 | 갈매나무 | 2021 | 9791190123969 | NaN | NaN | NaN | NaN | 1 | 0 | 2021-03-19 | NaN |
2 | 3 | 나도 한 문장 잘 쓰면 바랄 게 없겠네 | 김선영 지음 | 블랙피쉬 | 2021 | 9788968332982 | NaN | NaN | NaN | NaN | 1 | 0 | 2021-03-19 | NaN |
3 | 4 | 예루살렘 해변 | 이도 게펜 지음, 임재희 옮김 | 문학세계사 | 2021 | 9788970759906 | NaN | NaN | NaN | NaN | 1 | 0 | 2021-03-19 | NaN |
4 | 5 | 김성곤의 중국한시기행 : 장강·황하 편 | 김성곤 지음 | 김영사 | 2021 | 9788934990833 | NaN | NaN | NaN | NaN | 1 | 0 | 2021-03-19 | NaN |
CSV 파일의 첫 행이 열 이름이 아니라면 read_csv() 함수를 호출할 때 header 매개변수를 None으로 지정해서 데이터 첫 행에 열 이름이 없다는 것을 알리고, names 매개변수에 열 이름 리스트를 따로 전달해 준다.
이때 names 매개변수에 전달하는 열 이름에 중복된 이름이 있어서는 안됨
기본적으로 utf-8형식으로 저장하기 때문에 나중에 파일을 열 때 encoding 형식을 따로 지정하지 않아도 된다.
df.to_csv('ns_202103.csv')
with open('ns_202103.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,
df.to_csv('ns_2021032.csv',index = False)
#인덱스를 무시하고 저장
with open('ns_2021032.csv') as f:
for i in range(3):
print(f.readline(), end = '')
번호,도서명,저자,출판사,발행년도,ISBN,세트 ISBN,부가기호,권,주제분류번호,도서권수,대출건수,등록일자,Unnamed: 13 1,인공지능과 흙,김동훈 지음,민음사,2021,9788937444319,,,,,1,0,2021-03-19, 2,가짜 행복 권하는 사회,김태형 지음,갈매나무,2021,9791190123969,,,,,1,0,2021-03-19,
ns_202103.csv 파일에는 첫번째 열에 인덱스가 있으므로 0으로 지정한다.
ns_df = pd.read_csv('ns_202103.csv',index_col = 0, low_memory = False)
ns_df.head()
번호 | 도서명 | 저자 | 출판사 | 발행년도 | ISBN | 세트 ISBN | 부가기호 | 권 | 주제분류번호 | 도서권수 | 대출건수 | 등록일자 | Unnamed: 13 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 1 | 인공지능과 흙 | 김동훈 지음 | 민음사 | 2021 | 9788937444319 | NaN | NaN | NaN | NaN | 1 | 0 | 2021-03-19 | NaN |
1 | 2 | 가짜 행복 권하는 사회 | 김태형 지음 | 갈매나무 | 2021 | 9791190123969 | NaN | NaN | NaN | NaN | 1 | 0 | 2021-03-19 | NaN |
2 | 3 | 나도 한 문장 잘 쓰면 바랄 게 없겠네 | 김선영 지음 | 블랙피쉬 | 2021 | 9788968332982 | NaN | NaN | NaN | NaN | 1 | 0 | 2021-03-19 | NaN |
3 | 4 | 예루살렘 해변 | 이도 게펜 지음, 임재희 옮김 | 문학세계사 | 2021 | 9788970759906 | NaN | NaN | NaN | NaN | 1 | 0 | 2021-03-19 | NaN |
4 | 5 | 김성곤의 중국한시기행 : 장강·황하 편 | 김성곤 지음 | 김영사 | 2021 | 9788934990833 | NaN | NaN | NaN | NaN | 1 | 0 | 2021-03-19 | NaN |
to_excel() 메서드로 데이터프레임을 엑셀로 저장할 수 있다.
#판다스는 엑셀 파일을 만들기 위해 기본적으로 openpyxl 패키지를 사용한다.
#그런데 이 패키지로 한글 데이터를 쓰면 오류가 발생한다.
#이때는 대신 xlsxwriter 패키지를 사용할 수 있다. 코랩에서 pip 명령어로 xlsxwriter 패키지를 먼저 설치한 후
#to_excel() 메서드에 engine='xlsxwriter'를 지정한다.
ns_df.to_excel('ns_202104.xlsx',index = False)
--------------------------------------------------------------------------- IllegalCharacterError Traceback (most recent call last) <ipython-input-21-c06635e97148> in <module> ----> 1 ns_df.to_excel('ns_202104.xlsx',index = False) /usr/local/lib/python3.9/dist-packages/pandas/core/generic.py in to_excel(self, excel_writer, sheet_name, na_rep, float_format, columns, header, index, index_label, startrow, startcol, engine, merge_cells, encoding, inf_rep, verbose, freeze_panes, storage_options) 2282 inf_rep=inf_rep, 2283 ) -> 2284 formatter.write( 2285 excel_writer, 2286 sheet_name=sheet_name, /usr/local/lib/python3.9/dist-packages/pandas/io/formats/excel.py in write(self, writer, sheet_name, startrow, startcol, freeze_panes, engine, storage_options) 838 839 try: --> 840 writer.write_cells( 841 formatted_cells, 842 sheet_name, /usr/local/lib/python3.9/dist-packages/pandas/io/excel/_openpyxl.py in write_cells(self, cells, sheet_name, startrow, startcol, freeze_panes) 459 row=startrow + cell.row + 1, column=startcol + cell.col + 1 460 ) --> 461 xcell.value, fmt = self._value_with_fmt(cell.val) 462 if fmt: 463 xcell.number_format = fmt /usr/local/lib/python3.9/dist-packages/openpyxl/cell/cell.py in value(self, value) 213 def value(self, value): 214 """Set the value and infer type and display options.""" --> 215 self._bind_value(value) 216 217 @property /usr/local/lib/python3.9/dist-packages/openpyxl/cell/cell.py in _bind_value(self, value) 192 193 elif dt == "s": --> 194 value = self.check_string(value) 195 if len(value) > 1 and value.startswith("="): 196 self.data_type = 'f' /usr/local/lib/python3.9/dist-packages/openpyxl/cell/cell.py in check_string(self, value) 160 value = value[:32767] 161 if next(ILLEGAL_CHARACTERS_RE.finditer(value), None): --> 162 raise IllegalCharacterError 163 return value 164 IllegalCharacterError:
!pip install xlsxwriter
Looking in indexes: https://pypi.org/simple, https://us-python.pkg.dev/colab-wheels/public/simple/ Collecting xlsxwriter Downloading XlsxWriter-3.0.9-py3-none-any.whl (152 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 152.8/152.8 KB 13.5 MB/s eta 0:00:00 Installing collected packages: xlsxwriter Successfully installed xlsxwriter-3.0.9
ns_df.to_excel('ns_202104.xlsx',index = False,engine = 'xlsxwriter')