相关疑难解决方法(0)

是否可以与python pandas进行模糊匹配合并?

我有两个DataFrames,我想根据列合并.然而,由于交替拼写,不同数量的空格,不存在/存在变音符号,我希望能够合并,只要它们彼此相似即可.

任何相似性算法都可以(soundex,Levenshtein,difflib).

假设一个DataFrame具有以下数据:

df1 = DataFrame([[1],[2],[3],[4],[5]], index=['one','two','three','four','five'], columns=['number'])

       number
one         1
two         2
three       3
four        4
five        5

df2 = DataFrame([['a'],['b'],['c'],['d'],['e']], index=['one','too','three','fours','five'], columns=['letter'])

      letter
one        a
too        b
three      c
fours      d
five       e
Run Code Online (Sandbox Code Playgroud)

然后我想得到生成的DataFrame

       number letter
one         1      a
two         2      b
three       3      c
four        4      d
five        5      e
Run Code Online (Sandbox Code Playgroud)

python pandas

54
推荐指数
8
解决办法
4万
查看次数

Python模糊匹配(FuzzyWuzzy) - 保持最佳匹配

我正在尝试模糊匹配两个csv文件,每个文件包含一列相似但不相同的名称.

我的代码到目前为止如下:

import pandas as pd
from pandas import DataFrame
from fuzzywuzzy import process
import csv

save_file = open('fuzzy_match_results.csv', 'w')
writer = csv.writer(save_file, lineterminator = '\n')

def parse_csv(path):

with open(path,'r') as f:
    reader = csv.reader(f, delimiter=',')
    for row in reader:
        yield row


if __name__ == "__main__":
## Create lookup dictionary by parsing the products csv
data = {}
for row in parse_csv('names_1.csv'):
    data[row[0]] = row[0]

## For each row in the lookup compute the partial ratio
for row in parse_csv("names_2.csv"): …
Run Code Online (Sandbox Code Playgroud)

python fuzzy-search string-matching fuzzywuzzy

7
推荐指数
3
解决办法
1万
查看次数

Python Pandas模糊合并/匹配重复

我目前有2个数据帧,1个用于捐赠者,1个用于筹款.理想情况下,我想要找到的是,如果有任何筹款人也捐赠,如果是的话,将一些信息复制到我的募捐人数据集(捐赠者姓名,电子邮件和他们的第一次捐赠).我的数据存在问题1)我需要通过姓名和电子邮件进行匹配,但用户可能会略有不同的名称(来自Kat和Kathy).2)捐赠者和筹款人的名称重复.2a)有了捐赠者,我可以获得独特的名字/电子邮件组合,因为我只关心第一个捐赠日期2b)虽然我需要保留两行而不会丢失数据,如日期.

我现在的示例代码:

import pandas as pd
import datetime
from fuzzywuzzy import fuzz
import difflib 

donors = pd.DataFrame({"name": pd.Series(["John Doe","John Doe","Tom Smith","Jane Doe","Jane Doe","Kat test"]), "Email": pd.Series(['a@a.ca','a@a.ca','b@b.ca','c@c.ca','something@a.ca','d@d.ca']),"Date": (["27/03/2013  10:00:00 AM","1/03/2013  10:39:00 AM","2/03/2013  10:39:00 AM","3/03/2013  10:39:00 AM","4/03/2013  10:39:00 AM","27/03/2013  10:39:00 AM"])})
fundraisers = pd.DataFrame({"name": pd.Series(["John Doe","John Doe","Kathy test","Tes Ester", "Jane Doe"]),"Email": pd.Series(['a@a.ca','a@a.ca','d@d.ca','asdf@asdf.ca','something@a.ca']),"Date": pd.Series(["2/03/2013  10:39:00 AM","27/03/2013  11:39:00 AM","3/03/2013  10:39:00 AM","4/03/2013  10:40:00 AM","27/03/2013  10:39:00 AM"])})
donors["Date"] = pd.to_datetime(donors["Date"], dayfirst=True)
fundraisers["Date"] = pd.to_datetime(donors["Date"], dayfirst=True)
donors["code"] = donors.apply(lambda row: str(row['name'])+' '+str(row['Email']), axis=1)
idx = donors.groupby('code')["Date"].transform(min) == …
Run Code Online (Sandbox Code Playgroud)

python fuzzy-search pandas fuzzywuzzy

5
推荐指数
1
解决办法
6531
查看次数

Python 将数据集中的相似记录(字符串)分组

我有一个这样的输入表:

In [182]: data_set
Out[182]: 
       name             ID
0  stackoverflow       123      
1  stikoverflow        322      
2  stack, overflow     411      
3  internet.com        531      
4  internet            112      
5  football            001
Run Code Online (Sandbox Code Playgroud)

我想根据模糊模糊对类似的字符串进行分组。因此,在应用模糊匹配后,所有超过某个相似度阈值(如 > %90 相似度)的字符串将组合在一起。所以期望的输出是:

In [182]: output
Out[182]: 
       name             ID     group
0  stackoverflow       123       1
1  stikoverflow        322       1
2  stack, overflow     411       1
3  internet.com        531       2
4  internet            112       2
5  football            001       3
Run Code Online (Sandbox Code Playgroud)

我正在搜索不同的主题,我发现这个这个只是名称匹配而不是聚类。此外,这个只显示了最佳匹配,它对我没有帮助。这个页面也解释了k-means聚类需要预先设置聚类的数量,这在这种情况下是不切实际的。

更新:

我发现包中的process方法可以在fuzzywuzzy某种程度上解决我的问题。但是此方法仅将字符串与列表进行比较,而不是将列表与列表进行比较:

from fuzzywuzzy import …
Run Code Online (Sandbox Code Playgroud)

python cluster-analysis string-matching pandas fuzzywuzzy

5
推荐指数
1
解决办法
1736
查看次数