遍历文件夹中的文件

Iterating through files in a folder

我正在使用 pandas 阅读和分析大型 NHS 处方数据集。它们单独保存为文件夹中的 csv 文件。 我想将相同的几行代码分别应用于这些文件中的每一个 - 所以我想用 pandas 单独读取每个数据帧,然后提取相关数据并执行基本计算。

到目前为止,这是我的代码:

import pandas as pd
import glob

path = "/Volumes/TOSHIBA EXT/Datasets/2015"
all_files = glob.glob(path + "/*.CSV")

for f in all_files:
    pd.read_csv(f,index_col=None, header=0, usecols=[2,4,5], names=['PRACTICE','BNF NAME', 'ITEMS'])
    f=f[f['BNF NAME'].str.contains('Ampicillin' and 'Amoxicillin' and 'Co-Amoxiclav')]
    print pd.to_numeric(f['ITEMS']).sum()

但是出现以下错误..

TypeError: string indices must be integers, not str 

理想情况下,我想定义一个函数来选择包含字符串的相关行:"Ampicillin"、"Amoxicillin" 和 "Co-Amoxiclav";然后合计每个项目的数量(即合计名为 'ITEMS' 的列),然后我可以在 for 循环中使用它来遍历每个文件。

如有任何关于如何避免此错误并实现上述目标的指示,我们将不胜感激。

非常感谢! :)

f 是文件名,但您将其用作 DataFrame - f['BNF NAME']

你需要

df = pd.read_csv(...)

然后你可以使用

df['BNF NAME']

df = df[ df['BNF NAME'] ... ]

df['ITEMS']

您的代码中有两个问题:

1) pd.read_csv 的 return 值未存储在变量中。这就是为什么你得到 TypeError - 你试图对 f (文件名)进行操作,就好像它是 DataFrame.

2) 过滤器不起作用,因为表达式是从内向外求值的。要解决这个问题,您可以创建一个选项列表,然后使用 isin 来测试目标是否在列表中,如下所示:

df["BNF Name"].isin(['Ampicillin', 'Amoxicillin', 'Co-Amoxiclav'])