🔥알림🔥
① 테디노트 유튜브 -
구경하러 가기!
② LangChain 한국어 튜토리얼
바로가기 👀
③ 랭체인 노트 무료 전자책(wikidocs)
바로가기 🙌
④ RAG 비법노트 LangChain 강의오픈
바로가기 🙌
⑤ 서울대 PyTorch 딥러닝 강의
바로가기 🙌
이번 에피소드에서는 Pandas의 파일 입출력에 대하여 알아보겠습니다. 그리고, 데이터 분석에서 DB를 제외한 가장 많이 사용되는 파일 형식인 엑셀(Excel)과 CSV (Comma Separated Value)을 로드하고 데이터프레임(DataFrame)을 엑셀(Excel)이나 CSV형식으로 저장하는 방법에 대하여 공유하고자 합니다.
Excel 데이터를 바로 읽어들일 수 있으며, sheet_name
을 지정하면 해당 sheet를 가져옵니다.
|
대중교통구분 |
노선명 |
년월 |
승차총승객수 |
0 |
지하철 |
1호선 |
201711 |
8633618 |
1 |
지하철 |
1호선 |
201712 |
8737235 |
2 |
지하철 |
1호선 |
201801 |
8145989 |
3 |
지하철 |
1호선 |
201802 |
7273309 |
4 |
지하철 |
1호선 |
201803 |
8692551 |
|
대중교통구분 |
년월 |
승차총승객수 |
0 |
버스 |
201711 |
163443126 |
1 |
버스 |
201712 |
162521011 |
2 |
버스 |
201801 |
153335185 |
3 |
버스 |
201802 |
134768582 |
4 |
버스 |
201803 |
166177855 |
sheet_name
을 None으로 지정하면, 모든 sheet를 가지고 옵니다.
가지고 올 때는 OrderedDict로 가져오며, keys()
로 시트명을 조회할 수 있습니다.
OrderedDict([('철도', 대중교통구분 노선명 년월 승차총승객수
0 지하철 1호선 201711 8633618
1 지하철 1호선 201712 8737235
2 지하철 1호선 201801 8145989
3 지하철 1호선 201802 7273309
4 지하철 1호선 201803 8692551
.. ... ... ... ...
596 지하철 우이신설선 201901 1263643
597 지하철 우이신설선 201902 1102109
598 지하철 우이신설선 201903 1402393
599 지하철 우이신설선 201904 1403115
600 지하철 우이신설선 201905 1469681
[601 rows x 4 columns]), ('버스', 대중교통구분 년월 승차총승객수
0 버스 201711 163443126
1 버스 201712 162521011
2 버스 201801 153335185
3 버스 201802 134768582
4 버스 201803 166177855
5 버스 201804 160452595
6 버스 201805 164390595
7 버스 201806 156999747
8 버스 201807 163736112
9 버스 201808 160240197
10 버스 201809 151311657
11 버스 201810 165820934
12 버스 201811 163017758
13 버스 201812 158049446
14 버스 201901 153037549
15 버스 201902 131621925
16 버스 201903 161694445
17 버스 201904 161900273
18 버스 201905 166587933)])
|
대중교통구분 |
노선명 |
년월 |
승차총승객수 |
0 |
지하철 |
1호선 |
201711 |
8633618 |
1 |
지하철 |
1호선 |
201712 |
8737235 |
2 |
지하철 |
1호선 |
201801 |
8145989 |
3 |
지하철 |
1호선 |
201802 |
7273309 |
4 |
지하철 |
1호선 |
201803 |
8692551 |
|
대중교통구분 |
년월 |
승차총승객수 |
0 |
버스 |
201711 |
163443126 |
1 |
버스 |
201712 |
162521011 |
2 |
버스 |
201801 |
153335185 |
3 |
버스 |
201802 |
134768582 |
4 |
버스 |
201803 |
166177855 |
DataFrame을 Excel로 저장할 수 있으며, Excel로 저장시 파일명을 지정합니다.
index=False
옵션은 가급적 꼭 지정하는 옵션입니다. 지정을 안하면 index가 별도의 컬럼으로 저장되게 됩니다.
sheet_name
을 지정하여, 저장할 시트의 이름을 변경할 수 있습니다.
여래 개의 시트에 저장하기 위해서는 ExcelWriter를 사용해야 합니다.
CSV (Comma Separated Values)
- 한 줄이 한 개의 행에 해당하며, 열 사이에는 쉼표(,)를 넣어 구분합니다.
- Excel보다는 훨씬 가볍고 차지하는 용량이 적기 때문에 대부분의 파일데이터는 csv 형태로 제공됩니다.
(참고) 쉼표를 찍어 놓은 금액 데이터(100,000)를 CSV에 직접 집어넣으면 나중에 해석할 때 서로 다른 열로 취급되므로 문제가 될 수 있습니다. 해결책으로 쉼표 대신 탭 문자(\t)를 구분자로 사용하는 것이다. 이러한 경우 Tab Separated Values(TSV)라고 부른다.
|
자치구 |
세대 |
계 |
남자 |
여자 |
계.1 |
남자.1 |
여자.1 |
계.2 |
남자.2 |
여자.2 |
세대당인구 |
65세이상고령자 |
0 |
합계 |
4,202,888 |
10,197,604 |
5,000,005 |
5,197,599 |
9,926,968 |
4,871,560 |
5,055,408 |
270,636 |
128,445 |
142,191 |
2.36 |
1,321,458 |
1 |
종로구 |
72,654 |
162,820 |
79,675 |
83,145 |
153,589 |
75,611 |
77,978 |
9,231 |
4,064 |
5,167 |
2.11 |
25,425 |
2 |
중구 |
59,481 |
133,240 |
65,790 |
67,450 |
124,312 |
61,656 |
62,656 |
8,928 |
4,134 |
4,794 |
2.09 |
20,764 |
3 |
용산구 |
106,544 |
244,203 |
119,132 |
125,071 |
229,456 |
111,167 |
118,289 |
14,747 |
7,965 |
6,782 |
2.15 |
36,231 |
4 |
성동구 |
130,868 |
311,244 |
153,768 |
157,476 |
303,380 |
150,076 |
153,304 |
7,864 |
3,692 |
4,172 |
2.32 |
39,997 |
때때로 한글데이터를 불러올 때 다른 인코딩을 사용해야하는 경우도 있습니다.그럴 땐 encoding
옵션을 지정해주면 됩니다.
|
자치구 |
세대 |
계 |
남자 |
여자 |
계.1 |
남자.1 |
여자.1 |
계.2 |
남자.2 |
여자.2 |
세대당인구 |
65세이상고령자 |
0 |
합계 |
4,202,888 |
10,197,604 |
5,000,005 |
5,197,599 |
9,926,968 |
4,871,560 |
5,055,408 |
270,636 |
128,445 |
142,191 |
2.36 |
1,321,458 |
1 |
종로구 |
72,654 |
162,820 |
79,675 |
83,145 |
153,589 |
75,611 |
77,978 |
9,231 |
4,064 |
5,167 |
2.11 |
25,425 |
2 |
중구 |
59,481 |
133,240 |
65,790 |
67,450 |
124,312 |
61,656 |
62,656 |
8,928 |
4,134 |
4,794 |
2.09 |
20,764 |
3 |
용산구 |
106,544 |
244,203 |
119,132 |
125,071 |
229,456 |
111,167 |
118,289 |
14,747 |
7,965 |
6,782 |
2.15 |
36,231 |
4 |
성동구 |
130,868 |
311,244 |
153,768 |
157,476 |
303,380 |
150,076 |
153,304 |
7,864 |
3,692 |
4,172 |
2.32 |
39,997 |
데이터의 크기가 매우 큰 경우 memory에 한 번에 로드할 수 없습니다.
chunksize
를 지정하고 chunksize
만큼 끊어서 불어와서 처리하게 되면 용량이 매우 큰 데이터도 처리할 수 있습니다.
예시) chunksize=10
: 10개의 데이터를 로드합니다.
|
자치구 |
세대 |
계 |
남자 |
여자 |
계.1 |
남자.1 |
여자.1 |
계.2 |
남자.2 |
여자.2 |
세대당인구 |
65세이상고령자 |
0 |
합계 |
4,202,888 |
10,197,604 |
5,000,005 |
5,197,599 |
9,926,968 |
4,871,560 |
5,055,408 |
270,636 |
128,445 |
142,191 |
2.36 |
1,321,458 |
1 |
종로구 |
72,654 |
162,820 |
79,675 |
83,145 |
153,589 |
75,611 |
77,978 |
9,231 |
4,064 |
5,167 |
2.11 |
25,425 |
2 |
중구 |
59,481 |
133,240 |
65,790 |
67,450 |
124,312 |
61,656 |
62,656 |
8,928 |
4,134 |
4,794 |
2.09 |
20,764 |
3 |
용산구 |
106,544 |
244,203 |
119,132 |
125,071 |
229,456 |
111,167 |
118,289 |
14,747 |
7,965 |
6,782 |
2.15 |
36,231 |
4 |
성동구 |
130,868 |
311,244 |
153,768 |
157,476 |
303,380 |
150,076 |
153,304 |
7,864 |
3,692 |
4,172 |
2.32 |
39,997 |
5 |
광진구 |
158,960 |
372164 |
180992 |
191172 |
357211 |
174599 |
182612 |
14953 |
6393 |
8560 |
2.25 |
42214 |
6 |
동대문구 |
159839 |
369496 |
182932 |
186564 |
354079 |
177021 |
177058 |
15417 |
5911 |
9506 |
2.22 |
54173 |
7 |
중랑구 |
177548 |
414503 |
206102 |
208401 |
409882 |
204265 |
205617 |
4621 |
1837 |
2784 |
2.31 |
56774 |
8 |
성북구 |
188512 |
461260 |
224076 |
237184 |
449773 |
219545 |
230228 |
11487 |
4531 |
6956 |
2.39 |
64692 |
9 |
강북구 |
141554 |
330192 |
161686 |
168506 |
326686 |
160353 |
166333 |
3506 |
1333 |
2173 |
2.31 |
54813 |
|
자치구 |
세대 |
계 |
남자 |
여자 |
계.1 |
남자.1 |
여자.1 |
계.2 |
남자.2 |
여자.2 |
세대당인구 |
65세이상고령자 |
10 |
도봉구 |
136613 |
348646 |
171026 |
177620 |
346629 |
170289 |
176340 |
2017 |
737 |
1280 |
2.54 |
51312 |
11 |
노원구 |
219957 |
569384 |
276823 |
292561 |
565565 |
275211 |
290354 |
3819 |
1612 |
2207 |
2.57 |
71941 |
12 |
은평구 |
201869 |
494388 |
240220 |
254168 |
489943 |
238337 |
251606 |
4445 |
1883 |
2562 |
2.43 |
72334 |
13 |
서대문구 |
137207 |
327163 |
156765 |
170398 |
314982 |
152613 |
162369 |
12181 |
4152 |
8029 |
2.30 |
48161 |
14 |
마포구 |
169404 |
389649 |
185889 |
203760 |
378566 |
181346 |
197220 |
11083 |
4543 |
6540 |
2.23 |
48765 |
15 |
양천구 |
176921 |
479978 |
237117 |
242861 |
475949 |
235278 |
240671 |
4029 |
1839 |
2190 |
2.69 |
52975 |
16 |
강서구 |
247696 |
603772 |
294433 |
309339 |
597248 |
291249 |
305999 |
6524 |
3184 |
3340 |
2.41 |
72548 |
17 |
구로구 |
172272 |
447874 |
224436 |
223438 |
416487 |
207114 |
209373 |
31387 |
17322 |
14065 |
2.42 |
56833 |
18 |
금천구 |
105146 |
255082 |
130558 |
124524 |
236353 |
120334 |
116019 |
18729 |
10224 |
8505 |
2.25 |
32970 |
19 |
영등포구 |
165462 |
402985 |
202573 |
200412 |
368072 |
183705 |
184367 |
34913 |
18868 |
16045 |
2.22 |
52413 |
|
자치구 |
세대 |
계 |
남자 |
여자 |
계.1 |
남자.1 |
여자.1 |
계.2 |
남자.2 |
여자.2 |
세대당인구 |
65세이상고령자 |
20 |
동작구 |
173033 |
412520 |
201217 |
211303 |
400456 |
195775 |
204681 |
12064 |
5442 |
6622 |
2.31 |
56013 |
21 |
관악구 |
253826 |
525515 |
264763 |
260752 |
507203 |
256090 |
251113 |
18312 |
8673 |
9639 |
2.00 |
68082 |
22 |
서초구 |
173856 |
450310 |
216264 |
234046 |
445994 |
214036 |
231958 |
4316 |
2228 |
2088 |
2.57 |
51733 |
23 |
강남구 |
234107 |
570500 |
273301 |
297199 |
565550 |
270726 |
294824 |
4950 |
2575 |
2375 |
2.42 |
63167 |
24 |
송파구 |
259883 |
667483 |
325040 |
342443 |
660584 |
321676 |
338908 |
6899 |
3364 |
3535 |
2.54 |
72506 |
25 |
강동구 |
179676 |
453233 |
225427 |
227806 |
449019 |
223488 |
225531 |
4214 |
1939 |
2275 |
2.50 |
54622 |
저장하는 방법은 excel과 유사합니다. 다만, csv파일 형식에는 sheet_name
옵션은 없습니다.
읽어들인 Excel 파일도 Csv로 저장할 수 있습니다.
|
대중교통구분 |
년월 |
승차총승객수 |
0 |
버스 |
201711 |
163443126 |
1 |
버스 |
201712 |
162521011 |
2 |
버스 |
201801 |
153335185 |
3 |
버스 |
201802 |
134768582 |
4 |
버스 |
201803 |
166177855 |
댓글남기기