上述工作適用於字符串匹配。您可以進一步更改最終語句以匹配整數。
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中允許的那樣。 –