使用 difflib 将字符串与数据框中的行进行比较
Using difflib to compare a string with a row in a dataframe
我有一个字符串
email = 'joe@gmail.com'
和一个DF
df = DataFrame({ ‘id’: [1, 2, 3], 'email_address': [‘steve@gmail.com’, ‘joe@hotmail.com’, ‘bill@hotmail.com’ ]})
我想添加一个名为 'score' 的列,并根据我的电子邮件字符串对每个 email_address 进行评分。
我试过了:
df['score'] = difflib.SequenceMatcher(None, df['email_address'], email).ratio()
但它始终将所有内容评分为 0.0,即使我将字符串 email 与 df 中的其中一封电子邮件完全匹配也是如此。
上下文是我们遇到了人们注册多个帐户的问题,因此我们希望能够搜索电子邮件并查看是否已经存在任何类似的电子邮件。
对于这个问题,我也愿意采用不同的方法。
谢谢!
你可以使用 pandas.DataFrame.<b>apply</b>
:
In [1]: import pandas as pd
...: from difflib import SequenceMatcher
In [2]: df = pd.DataFrame({'id': [1, 2, 3], 'email_address': ['steve@gmail.com', 'joe@hotmail.com', 'bill@hotmail.com']})
...: df
Out[2]:
id email_address
0 1 steve@gmail.com
1 2 joe@hotmail.com
2 3 bill@hotmail.com
In [3]: email = 'joe@gmail.com'
In [4]: df['score'] = df['email_address'].apply(lambda e: SequenceMatcher(None, email, e).ratio())
...: df
Out[4]:
id email_address score
0 1 steve@gmail.com 0.785714
1 2 joe@hotmail.com 0.857143
2 3 bill@hotmail.com 0.620690
我有一个字符串
email = 'joe@gmail.com'
和一个DF
df = DataFrame({ ‘id’: [1, 2, 3], 'email_address': [‘steve@gmail.com’, ‘joe@hotmail.com’, ‘bill@hotmail.com’ ]})
我想添加一个名为 'score' 的列,并根据我的电子邮件字符串对每个 email_address 进行评分。 我试过了:
df['score'] = difflib.SequenceMatcher(None, df['email_address'], email).ratio()
但它始终将所有内容评分为 0.0,即使我将字符串 email 与 df 中的其中一封电子邮件完全匹配也是如此。
上下文是我们遇到了人们注册多个帐户的问题,因此我们希望能够搜索电子邮件并查看是否已经存在任何类似的电子邮件。
对于这个问题,我也愿意采用不同的方法。 谢谢!
你可以使用 pandas.DataFrame.<b>apply</b>
:
In [1]: import pandas as pd
...: from difflib import SequenceMatcher
In [2]: df = pd.DataFrame({'id': [1, 2, 3], 'email_address': ['steve@gmail.com', 'joe@hotmail.com', 'bill@hotmail.com']})
...: df
Out[2]:
id email_address
0 1 steve@gmail.com
1 2 joe@hotmail.com
2 3 bill@hotmail.com
In [3]: email = 'joe@gmail.com'
In [4]: df['score'] = df['email_address'].apply(lambda e: SequenceMatcher(None, email, e).ratio())
...: df
Out[4]:
id email_address score
0 1 steve@gmail.com 0.785714
1 2 joe@hotmail.com 0.857143
2 3 bill@hotmail.com 0.620690