【发布时间】:2020-01-20 14:50:55
【问题描述】:
我有一系列子目录文件夹,每个文件夹都有一个“_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 中。
有什么想法吗?
【问题讨论】:
-
您当前代码的行为是什么,它与您希望它做的事情有何不同?首先的想法是您可能不希望在
endswith测试中使用*(除非您使用glob),并且第一次运行代码时,您的第二个if 语句(寻找_Invoice_Reduced.csv)不会触发,因为循环的文件名是在您进行任何处理之前生成的。 -
通过一些基本的调试,您至少可以捕获其中的一些。