![](/img/trans.png)
[英]Break up a data-set into separate excel files based on a certain row value in a given column in Pandas?
[英]Query within multiple csv files for get the suitable data-set based on given conditions on pandas columns
我大約有25個CSV數據集。 每個csv文件都有許多公共列名。 現在,所有這些csv文件都用於語音識別域,您可以在其中處理文本到語音項目。 為特定類型的項目選擇數據集需要查看所有25個數據集並選擇首選的數據集。
例如,對於項目A
我需要其中具有特定功能的特定數據集。 例如,列Speacker
是Male
, Sampling rate
是48000
, Language
是en
等,等等。
如何讀取所有這些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.