【发布时间】:2019-10-03 19:50:44
【问题描述】:
我是 Python 新手,有一个关于将列表中的字符串匹配到 df 中的列的问题。
当我运行以下命令时,我希望创建一个名为“Match”的新列,如果列表中的字符串与列中的字符串匹配,则“Match”列中的值并且对应的行应该是True,如果不匹配,则为False。期望的结果是假、假、真、假、假。由于字符串“Honda”与“Honda Civic”不完全匹配,因此它不应该为 True。与“Toy”相同的不是“Toyota Corolla”的完全匹配。
创建 df:
Cars = {'Brand': ['Honda Civic','Toyota Corolla','Ford Focus','Audi A4', np.nan],
'Price': [22000,25000,27000,35000, 29000],
'Liscence Plate': ['ABC 123', 'XYZ 789', 'CBA 321', 'ZYX 987', 'DEF 456']}
df = DataFrame(Cars,columns= ['Brand', 'Price', 'Liscence Plate'])
然后我创建一个我想搜索的值列表,并用 | 连接。
search_for_these_values = ['Honda', 'Toy', 'Ford Focus', 'Audi A4 2019']
pattern = '|'.join(search_for_these_values)
在这里我尝试了 str.match 命令并给出了 True、True、True、False、False。
df['Match'] = df["Brand"].str.match(pattern, na=False)
在这里,我使用 == 运算符创建了一个循环,并给出了 False、False、False、False、False。
for i in range(0,len(pattern)):
df['Match'] = df['Brand'] == pattern[i]
感谢您的帮助!
【问题讨论】:
-
你在找isin:
df.Brand.isin(search_for_these_values) -
太好了,感谢您的帮助!