본문 바로가기

짜투리

[python] 엑셀과 판다스 DataFram으로 데이터 정제하기

728x90

 하웅. 어제 1시까지 즐거운 프로젝트를 했ㄸㅏ.. 그리고 간맥하고 기숙사 들어와서 씻고 누우니 3시.. 아침 9시 수업이라 8시에 있어낫더니 지금 죽을 맛이다. 

 


 어제 DB/웹프 프젝을 하는데 핑퐁오빠가 데이터 전처리를 맡겼다. 바로 csv 파일에서 필요한 칼럼만 뽑고 데이터를 조금 수정하는 것! 

 

 나는 바보 같이 판다스의 read_csv를 하고 필요한 칼럼을 뽑으려고 했는데... 옛 직장 4학년 오빠가 우리 스터디룸에 놀러와서 나 하는 걸 보더니. 

 

 "그냥 엑셀로 하면 되는 거 아니야?"

 

ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ맞다. 엑셀로 하면 되었따... 

 


<엑셀 part>

 

데이터는 "연령별 도서 키워드 데이터- 빅데이터 마켓"이다. 

 

1. 원본 데이터에서 필요한 칼럼

: 이 데이터에서 필요한 칼럼은 C열(연령대), D열(도서 순위), E열(키워드)이다. 

 


 

 2. 엑셀로 필요없는 칼럼 지우기

: 칼럼 선택하고 우클릭 누르면 삭제가 있따.

 


 

3. 도서 ID 칼럼 넣기

: 데이터가 총 1000개가 있는데 이걸 수동으로 1,2,3.... 으로 넣을까 생각했는데, 4학년 오빠가 엑셀 기능 중 하나를 알려주었다. 

 

 (1) 1을 쓴다

 (2) 칸 맨 끝에 십자표가 뜨면 ctrl을 누르고 쭉 잡아 땡긴다

 (3) 끗~

 


4. 데이터 수정

60대 이상 ->60대
영유아, 유아, 청소년, 초등 ->10대

: 표처럼 연령대 칼럼 데이터만 수정하면 된다. ctrl+F를 누르면

 

 

 

 다음과 같은 차이 뜨는 데. 오른쪽 바꾸기>데이터 수정>모두 바꾸기 를 하면 끗~~

 

엥ㅋㅋㅋㅋㅋㅋ

 

 사실 어제 했을 때 엑셀에서 (0~5)칸이 보호된 사항이라 변경이 안 된다는 문구가 떳다. 근데 왜 오늘은 돼냐 ㅅㅂ..

 


<판다스 part>

 

 이러면 판다스를 쓸 필요가 없었네ㅜㅜㅜ 아무튼 어제 엑셀 전처리는 이게 최대였따. 

 

 

1. 데이터 불러오기

: 는 다른 포스팅에서 구글 코랩에 데이터 파일 불러오기 참고

https://sogogi1000inbun.tistory.com/50

 

[python] konlpy 모듈 돌려버리기★colab에서 구글 드라이브 파일 가져오기

 연구실 자리 치우고, 연구실 사물함 치우고, 데이터 백업시키고, 교수님과 상담하고.. 눈치 챘겠지만 연구실을 나갔다.  나가게 된 계기에 대해서는 글 끝에 적어놓았따. 대학교 일문학과 전과

sogogi1000inbun.tistory.com

 

 

2. 데이터 수정1

 
import pandas as pd

file="/content/drive/MyDrive/Colab Notebooks/도서 데이터2 - 복사본.csv"
table=pd.read_csv(file)  #파일에 있는 테이블 저장

for i in range(len(table)):
  if '10대' in table['연령대'][i]:
    table['연령대'][i] = '10대'
    
table.to_csv('bookTest2.csv', encoding='euc-kr')

: 처음에 연령대 칼럼만 따로 빼서 수정하고 다시 열을 추가할 생각이었는데, 역시 4학년 오빠가 

 

"그냥 for문 돌리면 안돼?"

 

ㅋㅋㅋㅋㅋㅋ for문으로 하니 한줄 컷 가능. 그리고 csv 파일로 저장할 때 그냥 저장하고 다운 받으니까 글자가 다 깨지는 현상이 있는데. encoding='euc-kr'로 해주니 다운받아도 글자가 깨지지 않았다. 

 

 참고로 encoding='utf-8'도 글자가 깨진다

 


3. 문제 발생

: 후 다 만들었지만.. 수정 사항이 생겼따.

 

 우리는 연령별 도서 키워드 데이터가 필요하다. 해당 데이터는 각 연령대별 데이터가 100개씩 있는데, 10대(영유아, 유아, 초등, 청소년)만 400개가 되어버려서 10대로 100개로 맞추기 위해 청소년만 남기고 다 날리기로 했따. 

 

4. 데이터 수정2

: 이 데이터를 가져와서 다음 코드를 치면 돼지만..

file="/content/drive/MyDrive/Colab Notebooks/도서 데이터2 - 복사본.csv"

import pandas as pd
table=pd.read_csv(file)  #파일에 있는 테이블 저장

for i in range(len(table)):
  if '10대(0~5)' in table['연령대'][i]: 
    table=table.drop(i)
    continue
  if '10대(6~7)' in table['연령대'][i]: 
    table=table.drop(i)
    continue

 

 이렇게 하니까 행번호 600~800까지 싹 다 날라가더라ㅋㅋㅋㅋㅋ

 

 이게 왜 문제냐면. read_csv를 하면 데이터가 딕셔너리처럼 구성된다. 즉, 행을 싹다 날리면 key값이 날라가서 key에러가 나는거다. 

 

 이 문제 해결법은.. 그냥 2번에서 완성한 csv 파일을 엑셀로 들어가서. 행을 삭제하는 거다.

 


 뭔가 얼랑뚱땅 전처리를 했는데. 사실 엑셀로 다 할 수 있는 전처리였다. 괜히 시간 낭비만 오지게 한 것.. 

 

 그래서 전처리를 하기 전에 꼭 코드로 해야하는 가?에 관해 생각을 해보았고. 엑셀도 훌륭한 전처리 기능을 가지고 있따는 걸 깨달은 시간이었다.