python - 在多个 csv 文件中查询,以根据 pandas 列上的给定条件获取合适的数据集
问题描述
我有大约 25 个 csv 数据集。每个 csv 文件都有许多常见的列名。现在这些所有 csv 文件都用于语音识别领域,您可以在其中处理文本到语音项目。为特定类型的项目选择数据集需要查看所有 25 个数据集并选择首选的一个。
例如,对于项目,A
我需要具有特定功能的特定数据集。像,列Speacker
是Male
,Sampling rate
是48000
,Language
是en
等等等等。
如何读取所有这些 cvs 文件并获取与条件匹配的数据集的名称。
我尝试使用itertuples
csv 的行来查找包含目标信息的行。但是,我只需要数据的名称作为结果。
我在这里没有找到太多可寻找的东西:
import os, fnmatch
result = []
def find(pattern, path):
for root, dirs, files in os.walk(path):
for name in files:
if fnmatch.fnmatch(name, pattern):
result.append(os.path.join(root, name))
return result
csv = find('*.csv', './')
该函数返回所有 25 个 csv 文件,现在我坚持编写逻辑来搜索所有 csv 文件并找到列包含给定值的数据集的名称。我正在寻找我的代码接受多个参数(条件)并查询这 25 个 csv 文件列并在每一列中找到匹配项的东西。然后告诉包含这些特征的数据集的名称。
条件:
Language = 'en'
Gender = 'Male'
Sample rate = 48000
预期输出:
Following Data has such features:
1) Data_xyz
2) Data_abc
已编辑
解决方案
我们可以Series.isin
用来检查该列是否具有query
. 然后我们将数据框的索引保存到列表中,因为我们无法将数据框的名称保存在列表中:
mathces= [x for x, df in enumerate(final_data) if (df['Gender'].isin(query) & df['Lang'].isin(query)).any()]
输出
print(matches)
[0]
这意味着只有第一个数据帧有匹配项。