遍历文件夹中的文件
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'])
我正在使用 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'])