Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 检查字符串列表中的字符串是否在DataFrame列中_Python_String_Pandas - Fatal编程技术网

Python 检查字符串列表中的字符串是否在DataFrame列中

Python 检查字符串列表中的字符串是否在DataFrame列中,python,string,pandas,Python,String,Pandas,我是Python新手,有一个关于将列表中的字符串与df中的列相匹配的问题 当我运行以下命令时,我希望创建一个名为“Match”的新列,如果列表中的字符串与列中的字符串匹配,“Match”列和相应行中的值应为True,如果不匹配,则为False。期望的结果将是假,假,真,假,假。因为字符串“Honda”与“Honda Civic”不完全匹配,所以不应该是真的。“玩具”与“丰田花冠”并不完全匹配 创建df: Cars = {'Brand': ['Honda Civic','Toyota Coroll

我是Python新手,有一个关于将列表中的字符串与df中的列相匹配的问题

当我运行以下命令时,我希望创建一个名为“Match”的新列,如果列表中的字符串与列中的字符串匹配,“Match”列和相应行中的值应为True,如果不匹配,则为False。期望的结果将是假,假,真,假,假。因为字符串“Honda”与“Honda Civic”不完全匹配,所以不应该是真的。“玩具”与“丰田花冠”并不完全匹配

创建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)
for i in range(0,len(pattern)):
    df['Match'] = df['Brand'] == pattern[i]
在这里,我使用==操作符创建了一个循环,并给出了False、False、False、False、False

df['Match'] = df["Brand"].str.match(pattern, na=False)
for i in range(0,len(pattern)):
    df['Match'] = df['Brand'] == pattern[i]

谢谢你的帮助

如果需要匹配列表中的值,请使用:

带有
match
的解决方案用于检查子字符串,因此输出不同

与和参数匹配子字符串的替代解决方案
na=False

df['Match'] = df["Brand"].str.contains(pattern, na=False)
print (df)
            Brand  Price Liscence Plate  Match
0     Honda Civic  22000        ABC 123   True
1  Toyota Corolla  25000        XYZ 789   True
2      Ford Focus  27000        CBA 321   True
3         Audi A4  35000        ZYX 987  False
4             NaN  29000        DEF 456  False
编辑:

对于子字符串中的测试值,可以在
中使用列表理解和循环值,在
中搜索这些值,并在
中使用
中的
进行测试匹配,以返回至少一个
True

df['Match'] = [any(x in z for z in search_for_these_values) 
                                if x == x 
                                else False 
                                for x in df["Brand"]]
print (df)

            Brand  Price Liscence Plate  Match
0     Honda Civic  22000        ABC 123  False
1  Toyota Corolla  25000        XYZ 789  False
2      Ford Focus  27000        CBA 321   True
3         Audi A4  35000        ZYX 987   True
4             NaN  29000        DEF 456  False

您正在寻找isin:
df.Brand.isin(搜索这些值)
太好了,谢谢您的帮助!好的,太好了,非常感谢你的帮助!另一个快速问题,如果我想显示true,如果search\u for\u中的整个字符串都在列中的字符串中,那么我会使用哪个命令。例如,字符串“奥迪A4 2019”显示为真,因为整个“奥迪A4”字符串在“奥迪A4 2019”范围内。期望的结果是假,假,真,真,假。嗯,看起来更复杂。@BradKlassen-添加了答案。非常感谢您的帮助,非常感谢!