데이터 출처:
https://www.data.go.kr/data/15013192/standard.do
전국금연구역표준데이터
금연구역 정보(금연구역 지역, 면적, 위반과태료 등)를 제공합니다. 공공데이터 개방 표준데이터 속성정보(표현형식/단위 등)는 [공공데이터 개방 표준]고시를 참고하시기 바랍니다.(정보공유>
www.data.go.kr
위 링크의 데이터 목록처럼 데이터 컬럼 형식은 같지만 방대한 데이터의 양 때문에 데이터를 끊어서 제공하는 경우가 있다.
일일이 데이터를 읽고 concat하기에는 시간이 오래 걸리기에 for문과 os, pandas 모듈을 사용하여 concat하는 방법이다.
1. os 모듈로 작업위치 확인 및 변경
import os
import pandas as pd
os.getcwd()
'C:\\Users\\user'
os.getcwd()는 현재 작업중인 파이썬 폴더를 알려준다.
os.chdir("C:\\Users\\user\\Desktop\\티스토리데이터\\os")
os.getcwd()
'C:\\Users\\user\\Desktop\\티스토리데이터\\os'
os.chdir()를 활용하면 폴더를 옮길 수 있다.
폴더의 경로는 폴더내의 빈공간을 마우스 우클릭 후 속성탭에 들어가면 위치를 확인 가능하다.
그리고 주피터 노트북내에서 원하는 셀을 누른뒤에 esc를 누르고 f를 누르면 일괄바꾸기 기능이 작동되는데 \를 \\로 바꿔주면 파이썬에서 인식하는 경로의 형식으로 바꾸는게 손쉽게 가능하다.
print(os.listdir())
['chim_df.xlsx', 'corr.csv', 'tb_hb_ind_egnin_m.csv', 'test.csv', 'test_.csv', 'test_cnt.csv', '경기도_가평군_금연구역_20211012_1634033497993_29131.csv', '경기도_고양시_금연구역_20210920_1634617775511_649377.csv', '경기도_남양주시_금연구역_20210930_1634027480812_2270079.csv', '경기도_포천시_금연구역_20210930_1634790042474_958431.csv', '계산을해보자.csv', '상권분석_final.twbx', '성연령별매출 추출_Extract.csv', '청년상권 클러스터링.ipynb']
os.listdir() 을 활용하면 현재 폴더안에 있는 파일들의 이름을 불러와준다.
여기서 우리가 가져와야할 데이터는
경기도_xxx_금연구역_xxxx.csv
이런 형식의 데이터만 불러와 concat하고자 한다.
print(os.listdir())
csv_list = list(filter(lambda x : x.split('.')[-1] == 'csv', os.listdir()))
print(csv_list)
csv_list2 = list(filter(lambda x : '금연구역'in x, csv_list))
print(csv_list2)
['chim_df.xlsx', 'corr.csv', 'tb_hb_ind_egnin_m.csv', 'test.csv', 'test_.csv', 'test_cnt.csv', '경기도_가평군_금연구역_20211012_1634033497993_29131.csv', '경기도_고양시_금연구역_20210920_1634617775511_649377.csv', '경기도_남양주시_금연구역_20210930_1634027480812_2270079.csv', '경기도_포천시_금연구역_20210930_1634790042474_958431.csv', '계산을해보자.csv', '상권분석_final.twbx', '성연령별매출 추출_Extract.csv', '청년상권 클러스터링.ipynb']
['corr.csv', 'tb_hb_ind_egnin_m.csv', 'test.csv', 'test_.csv', 'test_cnt.csv', '경기도_가평군_금연구역_20211012_1634033497993_29131.csv', '경기도_고양시_금연구역_20210920_1634617775511_649377.csv', '경기도_남양주시_금연구역_20210930_1634027480812_2270079.csv', '경기도_포천시_금연구역_20210930_1634790042474_958431.csv', '계산을해보자.csv', '성연령별매출 추출_Extract.csv']
['경기도_가평군_금연구역_20211012_1634033497993_29131.csv', '경기도_고양시_금연구역_20210920_1634617775511_649377.csv', '경기도_남양주시_금연구역_20210930_1634027480812_2270079.csv', '경기도_포천시_금연구역_20210930_1634790042474_958431.csv']
이렇게 파이썬의 내장함수 filter를 활용하면 리스트 중 조건에 만족하는 리스트만을 생성할 수 있다.
https://gwoolab.tistory.com/13
[ python 기초 ] lambda, map, filter
lambda 함수를 한줄에 정의하고 사용만 한다.코드의 간결함 메모리의 절약 람다 함수는 정의와 동시에 사용할 수 있음 lambda 매개변수 : 리턴값 print((lambda x : x**2)(2)) 4 제곱을 해주는 함수를 정의하
gwoolab.tistory.com
이렇게 타겟하는 파일만을 확인하고 포문으로 빈데이터 프레임에 하나씩 쌀으면 된다
df = pd.DataFrame()
for file in csv_list2:
tmp_df = pd.read_csv(file, encoding = 'euc-kr')
print(tmp_df.shape)
df = pd.concat([df,tmp_df])
print(df.shape)
(131, 15)
(131, 15)
(2572, 15)
(2703, 15)
(10496, 15)
(13199, 15)
(3393, 15)
(16592, 15)
데이터 들이 df라는 데이터에 차례로 쌓이는 것을 확인할 수 있다.
'pandas' 카테고리의 다른 글
[ pandas ] to_datetime 시간데이터 다루기 기본 (0) | 2022.02.14 |
---|---|
[pandas] 결측값처리 (0) | 2021.12.02 |
[ pandas 기초] 컬럼명변경 pandas.rename (0) | 2021.12.01 |
[ pandas ] 데이터 타입변경, 데이터 범주화 (0) | 2021.08.30 |
[ pandas ] 시리즈 Series (1) | 2021.08.20 |