簡體   English   中英

在多個csv文件中查詢,以根據熊貓列上的給定條件獲取合適的數據集

[英]Query within multiple csv files for get the suitable data-set based on given conditions on pandas columns

我大約有25個CSV數據集。 每個csv文件都有許多公共列名。 現在,所有這些csv文件都用於語音識別域,您可以在其中處理文本到語音項目。 為特定類型的項目選擇數據集需要查看所有25個數據集並選擇首選的數據集。

例如,對於項目A我需要其中具有特定功能的特定數據集。 例如,列SpeackerMaleSampling rate48000Languageen等,等等。

如何讀取所有這些cvs文件並獲取與條件匹配的數據集的名稱。

我試圖在csv的行上使用itertuples來查找包含目標信息的行。 但是,我只需要數據名稱作為結果。

我在這里找不到很多東西:

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]

這意味着只有第一個數據幀具有匹配項。

您可以遍歷每一行,並且如果查詢中的所有關鍵字都在該行中的某個位置,則表示匹配。 您可以使用列表推導,在其中檢查“如果查詢中的所有項目都在我要查看的行中,則將其視為匹配項”。 在這種方法中,我們實際上是將這些行捕獲到一個新的數據框中,並查看結果數據框的形狀。 Shape是一個元組(行,列),因此,如果查看結果數據幀的shape [0],則如果沒有匹配項,則為零;如果有匹配項的行,則為1+。

data_0 = {'Name':['Ned', 'Ped', 'Ded'], 'Gender': ['Male', 'Male', 'Female'], 'Lang': ['En', 'De', 'Fr']}
data_1 = {'Name':['Sia', 'Kori', 'Maya'], 'Gender': ['Female', 'Female','Female' ], 'Lang': ['En', 'En','En']}
>>> for c, data_frame in enumerate(final_data):
...     if data_frame[data_frame.apply(lambda row: all([i in row.values for i in query]), axis=1)].shape[0] >= 1:
...             print('match on data_{}'.format(c))
...
match on data_0

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM