首页 > 解决方案 > 使用 Pandas 将 CSV 递归编辑到子目录

问题描述

我有一系列子目录文件夹,每个文件夹都有一个“_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 的列并保存子集。然后在它读完所有子目录后,将缩小的文件组合成一个 big_frame。

有什么想法吗?

标签: pythonpandascsv

解决方案


这将完成这项工作。

而不是打开,删除列,保存并继续;我选择只打开减少的列,保存这个减少的 DataFrame,然后附加到df. 这将导致所有减少的文件都堆叠在这个 DataFrame 中。

path = "."从当前目录使用go

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])

推荐阅读