完全相同的文本字符串不匹配

vag*_*ond 8 python string character-encoding dataframe pandas

我有一个数据帧两列title,并store包含文本字符串由我希望子集数据框:

In [84]:
    2631              coffee?mate sugar free french ...  jet.com
    2633            nestle coffeemate natural bliss ...  jet.com
    2634         coffee?mate liquid coffee creamer, ...  jet.com
    3085                       coffee?mate hazelnut ...  jet.com
Run Code Online (Sandbox Code Playgroud)

当我尝试:

df[(df.title.str.contains('coffee-mate')) & (df.store.str.contains('jet.com'))]
Run Code Online (Sandbox Code Playgroud)

我明白了:

Out[84]: 
Empty DataFrame
Columns: [title, store]
Index: []
Run Code Online (Sandbox Code Playgroud)

但是,当我这样做时:

df[(df.title.str.contains('coffee')) & (df.store.str.contains('jet.com'))]
Run Code Online (Sandbox Code Playgroud)

我明白了:

    2631              coffee?mate sugar free french ...  jet.com
    2633            nestle coffeemate natural bliss ...  jet.com
    2634         coffee?mate liquid coffee creamer, ...  jet.com
    3085                       coffee?mate hazelnut ...  jet.com
Run Code Online (Sandbox Code Playgroud)

我不知道该怎么做!

我试着复制角色'咖啡伴侣'进行等效测试并得到False.

'coffee?mate' == 'coffee-mate'
Out[92]: False
Run Code Online (Sandbox Code Playgroud)

我觉得这与编码有关,但不知道如何检测和修复问题.有人可以帮忙吗?

Par*_*ker 11

数据框中的"coffee-mate"使用非破坏连字符(u"\u2011"),搜索字符串使用连字符

非破坏 http://www.ltg.ed.ac.uk/~richard/utf-8.cgi?input=%E2%80%91&mode=char

你的连字符 http://www.ltg.ed.ac.uk/~richard/utf-8.cgi?input=-&mode=char

虽然它们看起来和你我一样,但Python认为它们是两个不同的角色.如果你将来遇到这个问题,我只是通过将角色粘贴到这个UTF8工具中来解决这个问题- 你明智地进行了比较coffee-matecoffee?mate