Рекурсивно редактировать CSV в подкаталогах с помощью панд - PullRequest
0 голосов
/ 19 сентября 2019

У меня есть ряд папок подкаталогов, каждая из которых имеет "_Invoice.csv".

/Invoice List/
              Invoice1folder/
                             ..._Invoice.csv
              Invoice2folder/ 
                             ..._Invoice.csv
              Invoice5folder/
                             ..._Invoice.csv
              Invoice9folder/
                             _Invoice.csv

С каждым "_Invoice.csv" у меня есть столбцы [A, B, C, D].Я пытаюсь выполнить рекурсивный поиск по всем папкам подкаталогов, открыть каждый файл "_Invoice.csv" и уменьшить столбцы только до [A, C], а затем сохранить его как "_Invoice_Reduced.csv".

"_Invoice.csv"       "_Invoice_Reduced.csv"
 A B C D        =>              A C
 1 2 3 4        =>              1 3 

Моя текущая попытка:

import pandas as pd
import os

columns_to_keep = ['A','C']
final_form= pd.DataFrame()

for file in os.listdir():
    if file.endswith('*_Invoice.csv'):
        df = pd.read_csv(file)
        df = df.loc[;columns_to_keep]
        df = df.to_csv(f'{file.name}_Invoice_Reduced.csv')
   if file.endswith('*_Invoice_Reduced.csv'):
        df = pd.read_csv(file)
        final_form= final_form.append(df, ignore_index=True)

TLDR: я пытаюсь создать сценарий, который входит в каждый подкаталог, уменьшает существующий ранее CSV, уменьшает столбцы CSVвниз и сохранить подмножество.Затем, после прочтения всех подкаталогов, объедините уменьшенные файлы в один большой_фрейм.

Есть мысли?

1 Ответ

1 голос
/ 19 сентября 2019

Это сделает работу.

Вместо того, чтобы открывать, удалять столбцы, сохранять и двигаться дальше;Я выбрал открытие только с уменьшенными столбцами, сохранив этот уменьшенный DataFrame и добавив df.Это приведет к тому, что все уменьшенные файлы будут объединены в этом одном кадре данных.

Использование path = "." идет из текущего каталога

from pathlib import Path
import pandas as pd


df = pd.DataFrame()
columns_to_keep = ['A','C']
path = "."
pattern = "*_Invoice.csv"

for file in Path(path).rglob(pattern):
    output_file = "{}/{}{}".format(file.parent, file.stem, "_Reduced.csv")
    _df = pd.read_csv(file, usecols=columns_to_keep)
    _df.to_csv(output_file, sep=",", index=False, header=True)
    df = pd.concat([df, _df])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...