【发布时间】:2017-04-03 09:32:33
【问题描述】:
我正在使用 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 循环中使用它来遍历每个文件。
不胜感激有关如何避免此错误并实现上述目标的任何指示。
非常感谢! :)
【问题讨论】:
-
总是显示完整的错误信息(Traceback)。还有其他有用的信息 - 即。哪一行有问题。
-
提示 - 使用
glob.iglob而不是glob.glob。它返回一个生成器而不是list,如果您要迭代许多文件,这将非常有用。 -
并且不要在你的 for 循环中重新分配
f- 这会让它非常混乱。
标签: python pandas for-loop iteration glob