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

时间:2017-07-01 20:30:40

标签: python string pandas dataframe character-encoding

我在数据框titlestore中有两列包含文本字符串,我希望通过该列对数据框进行子集化:

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

当我尝试:

df[(df.title.str.contains('coffee-mate')) & (df.store.str.contains('jet.com'))]

我明白了:

Out[84]: 
Empty DataFrame
Columns: [title, store]
Index: []

然而,当我这样做时:

df[(df.title.str.contains('coffee')) & (df.store.str.contains('jet.com'))]

我明白了:

    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

我不知道该怎么做!

我尝试复制角色'咖啡伴侣'进行等效性测试并获得False

'coffee‑mate' == 'coffee-mate'
Out[92]: False

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

1 个答案:

答案 0 :(得分:11)

"咖啡伴侣"在您的数据框中使用不间断的连字符(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 tool中即可解决此问题 - 您明智地对coffee-matecoffee‑mate

进行比较