python - 使用 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。
有什么想法吗?
解决方案
这将完成这项工作。
而不是打开,删除列,保存并继续;我选择只打开减少的列,保存这个减少的 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])
推荐阅读
- javascript - JS DOM 顺序问题
- kubernetes - 在同一个节点上运行两个 pod?
- mongodb - Mongoose 相当于“SELECT * FROM category where id <> parent_id;”
- python - 映射 Serie 和 Dataframe 值
- drools - 如何获取事件流规则来计算平均值
- python-3.x - 在二维 numpy 数组中获取最大值的邻居
- javascript - 如何识别嵌套数组中的对象并根据JS forLoop中的条件删除索引
- python - Python FTP 通过显式 TLS/SSL
- ansible - 如何在 Ansible 中使用无密码用户
- c# - 在aspnet中使用C#检查多个条件