2017-05-25 88 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中允许的那样。 –