Coding Challenge/오늘의 코드

판다스로 여러개의 csv파일 수정하기

인생마린 2020. 9. 10. 19:49
반응형

먼저 임시 파일 몇개를 만들어보자!

number.xlsx
1.csv

이처럼 number를 컬럼명으로하여 만들어 주자 나같은 경우는 tree가 이렇다

폴더 트리

지정 폴더 아래 파일들 위치를 찾아준다

os.walk를 이용하여 files폴더 아래에 있는 모든 파일을 읽어들여 준다!

endswith은 파일의 확장자를 반환한다. 튜플 형태로 여러개의 확장자를 전달 가능하다.

import os

path = "files\\"
# os.listdir(path) 특정 폴더만 하는 경우
for root, dirs, files in os.walk(path): # 해당 폴더 아래 있는 모든 파일 탐색
    for file in files:
        if file.endswith((".csv", ".xlsx")): # 찾는 확장자
            print(os.path.join(root, file))

이제 해당 파일들을 dataframe으로 읽어들여와보자.

csv파일일경우와 xlsx일 경우 읽어오는 메소드가 다르므로 구분해주자.

read_excel메소드를 사용하기 위해서는 pip install xlrd가 되어있어야 함에 유의하자

import os
import pandas as pd

path = "files\\"
filenames = []
# os.listdir(path) 특정 폴더만 하는 경우
for root, dirs, files in os.walk(path): # 해당 폴더 아래 있는 모든 파일 탐색
    for file in files:
        if file.endswith((".csv", ".xlsx")): # 찾는 확장자
            filenames.append(os.path.join(root, file))


for file in filenames:
    if file.split(".")[-1] == "xlsx":
        df = pd.read_excel(file, sheet_name="Sheet1") # pip install xlrd
    else:
        df = pd.read_csv(file)
    print(file)
    print(df.head())

결과

파일을 수정하고 저장해주자

import os
import pandas as pd

path = "files\\"
filenames = []
# os.listdir(path) 특정 폴더만 하는 경우
for root, dirs, files in os.walk(path): # 해당 폴더 아래 있는 모든 파일 탐색
    for file in files:
        if file.endswith((".csv", ".xlsx")): # 찾는 확장자
            filenames.append(os.path.join(root, file))


for file in filenames:
    if file.split(".")[-1] == "xlsx":
        df = pd.read_excel(file, sheet_name="Sheet1") # pip install xlrd
    else:
        df = pd.read_csv(file)
    for i in df.index:
        df.at[i, 'number'] += 1
    print(file)
    print(df.head())

    # save file from dataframe
    if file.split(".")[-1] == "xlsx":
        df.to_excel(file, sheet_name="Sheet1", index=False)
    else:
        df.to_csv(file, index=False)

실행시 모든 파일의 각 number row에 숫자가 1씩 증가한걸 확인 할수 있다.

1씩 증가

반응형