2017-05-25 29 views
0

我已經包含各種產品和它們的描述如下所示的圖像中的數據幀的字典如何子集a大熊貓數據幀字典包含基於鍵 - 值對在其上的濾波有許多工作要做:基於使用不區分大小寫匹配

ent_dict

{'brand': 'Dexter', 'color': 'brown', 'product': 'footwear', 'size': '32'} 

作爲能成爲一個因爲字典和數據框可能包含不同情況下的值,因此我需要在這裏進行不區分大小寫的匹配。此外,可能會有正常匹配會執行的數字列。 所以有人可以幫助我在這個。

回答

0

上述工作適用於字符串匹配。您可以進一步更改最終語句以匹配整數。

import numpy as np 
import pandas as pd 
import re 

df = pd.DataFrame({'Product': np.array(['Footwear' for i in range(4)]), 'Category': np.array(['Women' for i in range(4)]), 'Size': np.array([7, 7, 7, 8]), 'Color': np.array(['black', 'brown', 'blue', 'black'])}) 

ent_dict = {'Category': 'Women', 'Color': 'black', 'Product': 'Footwear'} 
values = [i for i in ent_dict.values()] 
columns = [df.filter(regex=re.compile(i, re.IGNORECASE)).columns[0] for i in ent_dict] 

df[eval(" & ".join(["(df['{0}'] == {1})".format(col, repr(cond)) 
      for col, cond in zip(columns, values)]))] 

不區分大小寫的搜索可以使用DataFrame對象的str.contains來完成。

df[eval(" & ".join(["(df['{0}'].str.contains({1}, case=False))".format(col, repr(cond)) 
      for col, cond in zip(columns, values)]))] 
+0

感謝您的快速反應,但問題是,在我的df顏色值可能是「黑色」,但在ent_dict它是「黑色」。這在這種情況下不起作用。 –

+0

更新了ans – praba230890

+0

非常感謝@ praba230890的幫助。最後一件事,如果我把大小也放在檢查部分,我會得到一個typeerror。我不確定如何在python 3+中使用整數進行字符串匹配,就像在Python 2.7中允許的那樣。 –

相關問題