使用 Pandas 递归地将 CSV 编辑到子目录

2023-12-21

我有一系列子目录文件夹,每个文件夹都有一个“_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 中。

有什么想法吗?


这样就可以完成工作了。

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

Using 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])
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Pandas 递归地将 CSV 编辑到子目录 的相关文章

随机推荐