Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用Pandas递归编辑CSV到子目录_Python_Pandas_Csv - Fatal编程技术网

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

Python 使用Pandas递归编辑CSV到子目录,python,pandas,csv,Python,Pandas,Csv,我有一系列子目录文件夹,每个文件夹都有一个_Invoice.csv /Invoice List/ Invoice1folder/ ..._Invoice.csv Invoice2folder/ ..._Invoice.csv Invoice5folder/

我有一系列子目录文件夹,每个文件夹都有一个_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的列,并保存子集。然后在读取所有子目录后,将缩减的文件合并到一个大的_框架中

有什么想法吗?

这就行了

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

使用路径=。从当前目录中删除

从pathlib导入路径 作为pd进口熊猫 df=pd.DataFrame 列_至_keep=['A','C'] 路径=。 模式=*\u Invoice.csv 对于Pathpath.rglobpattern中的文件: 输出_file={}/{}{}.formatfile.parent,file.stem,_Reduced.csv _df=pd.read\u csvfile,使用cols=columns\u保存 _df.to_csvoutput_文件,sep=,index=False,header=True df=pd.concat[df,_-df]
您当前代码的行为是什么,它与您希望它做的有什么差距?第一个想法是,除非您使用,否则您可能不希望在endswith测试中使用*,并且在第一次运行代码时,您的第二条if语句(查找_Invoice_Reduced.csv)不会触发,因为循环的文件名是在您进行任何处理之前生成的。您可以通过一点基本调试至少捕获其中的一些文件名。