首页 > 解决方案 > 在多个 csv 文件中查询,以根据 pandas 列上的给定条件获取合适的数据集

问题描述

我有大约 25 个 csv 数据集。每个 csv 文件都有许多常见的列名。现在这些所有 csv 文件都用于语音识别领域,您可以在其中处理文本到语音项目。为特定类型的项目选择数据集需要查看所有 25 个数据集并选择首选的一个。

例如,对于项目,A我需要具有特定功能的特定数据集。像,列SpeackerMaleSampling rate48000Languageen等等等等。

如何读取所有这些 cvs 文件并获取与条件匹配的数据集的名称。

我尝试使用itertuplescsv 的行来查找包含目标信息的行。但是,我只需要数据的名称作为结果。

我在这里没有找到太多可寻找的东西:

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

已编辑

标签: pythonpandascsvnumpy

解决方案


我们可以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]

这意味着只有第一个数据帧有匹配项。


推荐阅读