반응형
하단 코드의 한계는 뭘까?
>>> p = ['123Jongrogu', '151,000', '102,305' ,'25,456']
>>> for j in i :
if re.search('[a-z가-힣]',j) : # 알파벳, 한글인 경우 그대로 사용
i[i.index(j)] = j # i.index(j)는 j가 있는 인덱스 번호
else : # 알파벳, 한글이 아닌 경우, 하단 형태로 수정
i[i.index(j)] = (float(re.sub(',','',j)))
>>> i
['Jongrogu', 151767.0, 11093.0, 27394.0]
바로, p 요소 중 알파벳과 한글이 아닌 요소(특수문자, 빈 문자열 등)가 있을 때, 오류가 발생한다는 것이다
이 때 예외처리를 적용하면 간단해진다.
>>> i = ['123!!', '151,151', '', '!@#']
>>> for j in i :
try : # float()함수가 오류를 일으키지 않는 경우 변경
i[i.index(j)] = float(re.sub(',','',j))
except : # float()함수가 오류를 일으키면 예외 처리
pass
>>> i
['123!!', 151151.0, '', '!@#']
조건문 대신 위처럼 예외처리를 적용하니 훨씬 간결해졌다.
예외처리를 통해 숫자만 골라서 수정하기
일부분(total[1])만 수정해보자
>>> i = total[1]
>>> for j in i :
try :
i[i.index(j)] = float(re.sub(',','',j))
except :
pass
>>> i
['Total', 9740398.0, 285529.0, 1468146.0]
정상적으로 작동하므로 total전체에 적용하자
>>> for i in total :
for j in i :
try :
i[i.index(j)] = float(re.sub(',','',j))
except :
pass
>>> total
[['Gu', 'Korean', 'Foreigner', 'Senior'], ['Total', 9740398.0, 285529.0, 1468146.0], ...
정상적으로 작동한다면 이걸 함수로 만들고
def switch(listName) :
for i in listName :
for j in i :
try :
i[i.index(j)] = float(re.sub(',','',j))
except :
pass
return listName
이 함수를 기존 usecsv.py 모듈에 포함시켜서 또 필요한 경우에 활용하자
import csv, os, re
def opencsv(filename) :
f = open(filename, 'r')
reader = csv.reader(f)
output = []
for i in reader :
output.append(i)
return output
def writecsv(filename, the_list) :
with open(filename, 'w', newline = '') as f :
a = csv.writer(f, delimiter = ',')
a.writerows(the_list)
def switch(listName):
for i in listName:
for j in i:
try:
i[i.index(j)] = float(re.sub(',','',j))
except:
pass
return listName
반응형
'● 인공지능, 분석 > 20.12 생활 프로그래밍' 카테고리의 다른 글
[4. CSV] 부동산 실거래가 분석하기. 조건 필터링 / 별도로 저장하기 (0) | 2021.01.11 |
---|---|
[4. CSV] CSV 파일 데이터 분석하기 (0) | 2021.01.11 |
[4. CSV] 수정한 요소 새로 적재하기 vs 수정한 요소 덮어쓰기 (0) | 2021.01.11 |
[4. CSV] CSV 수정하기, 쉼표제거 (0) | 2021.01.09 |
튜플이란? j = 1,444,000이 튜플이 되는 이유? (0) | 2021.01.07 |