上述工作适用于字符串匹配。您可以进一步更改最终语句以匹配整数。
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)]))]
感谢您的快速反应,但问题是,在我的df颜色值可能是“黑色”,但在ent_dict它是“黑色”。这在这种情况下不起作用。 –
更新了ans – praba230890
非常感谢@ praba230890的帮助。最后一件事,如果我把大小也放在检查部分,我会得到一个typeerror。我不确定如何在python 3+中使用整数进行字符串匹配,就像在Python 2.7中允许的那样。 –