Python 엑셀 자동화로 컬럼 삭제하기

2019-11-29

많은 엑셀 파일을 전부 수정해야 하는 일이 발생할 수 있다. 모든 파일을 열어서 특정 열을 삭제해야 한다든지 특정 행을 삭제해야 한다든지 단순 반복 작업인데 엄청난 양이라면 시간 낭비처럼 느껴질 것이다. Python을 사용하면 그런 단순 반복 작업을 내가 직접 하지 않고도 깔끔하게 끝낼 수 있다.

그리고 컴퓨터의 성능이 괜찮다면 일이 끝나기를 기다리는 것보다는 Python이 일을 하고 있는 동안 나도 다른 일을 할 수 있으면 좋을 것이다. 그러므로 엑셀 작업이 끝나면 텔레그램으로 작업완료라는 메세지가 오게끔 할 것이다.

첫 번째 Python 코드는 한개의 파일만 읽어서 컬럼을 삭제할 때 사용했다. 두번째는 폴더내에 있는 여러개의 엑셀을 반복해서 읽어서 작업할 때 사용한 코드이다. 그러므로 두번째 코드에만 텔레그램 알림을 넣으면 될것이다.

import pandas as pd

csv_data = pd.read_csv("C:\\Desktop\\people.csv")
del csv_data["Name"]
del csv_data["Gender"]
del csv_data["height"]
csv_data.to_csv('C:\\temp_excel\\done_people.csv', index=False)
#index=False를 넣지 않으면 삭제 작업을 하고 index를 내용에 넣어버린다

첫번째 코드는 간단하니 설명은 생략한다.

두번째 코드부터 추가된 것은 반복문과 텔레그램 관련 코드 정도이다. 텔레그램 관련은 자세히 설명하지 않으니 찾아보시면 됩니다. https://gabrielkim.tistory.com/entry/Telegram-Bot-Token-및-Chat-Id-얻기

glob.glob()을 사용하면 파일명을 리스트에 넣어서 반환합니다. 그러므로 거기서 하나씩 가져와서 f라는 변수에 넣고 read_csv()를 통해 읽어와서 한 파일씩 삭제 작업을 수행합니다. 그리고 이름을 변경하지 않고 그대로 그 폴더 안에 덮어씌웁니다. 그렇기에 이런 방식으로 만약 작업을 하신 다면 원본을 다른 곳에 두고 복사해오셔서 작업하는 것이 좋습니다. *.csv라고 적으면 폴더 내에 있는 모든 csv 파일을 읽어온다는 의미입니다.

import pandas as pd
import glob
import telegram

my_token = '1234567890:********' #숫자와 긴 영문 숫자 조합으로 이루어진 토큰
bot = telegram.Bot(token = my_token)

#all_data = pd.DataFrame()
for f in glob.glob('C:\\Desktop\\*.csv'):
    csv_data = pd.read_csv(f)
    del csv_data["Name"]
    del csv_data["Gender"]
    del csv_data["height"]

    csv_data.to_csv('{}'.format(f), index=False)

bot.sendMessage(chat_id = 123456789, text="작업완료") #chat_id 본인에 맞는 chat_id

다음에는 이 정제된 데이터를 DB에 넣는 작업을 Python으로 하는 코드를 포스팅 할 예정입니다.