Python 如何将pandas数据帧中的字符串拆分为可以分解成新行的bigram?
我有一个名称记录数据库,我正试图为其创建bigram,并将bigram转换为数据帧中的新行。我这样做的原因是因为某些记录包含多个名称,而且有些记录可以对同一名称有不同的顺序。我的最终目标是寻找复制品,为每个独特的个体创造一个最终记录。我计划在这个结果上使用TF-IDF和余弦相似性。下面是我试图做的一个例子 当前: 目标: 尝试使用压缩、应用和分解: 或 使用列表理解: 编辑: 第二部分:Python 如何将pandas数据帧中的字符串拆分为可以分解成新行的bigram?,python,pandas,nltk,tf-idf,cosine-similarity,Python,Pandas,Nltk,Tf Idf,Cosine Similarity,我有一个名称记录数据库,我正试图为其创建bigram,并将bigram转换为数据帧中的新行。我这样做的原因是因为某些记录包含多个名称,而且有些记录可以对同一名称有不同的顺序。我的最终目标是寻找复制品,为每个独特的个体创造一个最终记录。我计划在这个结果上使用TF-IDF和余弦相似性。下面是我试图做的一个例子 当前: 目标: 尝试使用压缩、应用和分解: 或 使用列表理解: 编辑: 第二部分: df2 = pd.DataFrame([ [idx+1, f"{a} {b}"] fo
df2 = pd.DataFrame([ [idx+1, f"{a} {b}"] for idx,val in enumerate(df.Name) for (a,b) in (zip(val,val[1:]))], columns=['ID', 'Names'])
尝试使用压缩、应用和分解:
或
使用列表理解:
编辑:
第二部分:
df2 = pd.DataFrame([ [idx+1, f"{a} {b}"] for idx,val in enumerate(df.Name) for (a,b) in (zip(val,val[1:]))], columns=['ID', 'Names'])
所有的名字都有两个部分吗?一个记录可能只是一个名字或姓氏,或者有一个姓氏是两个用连字符分隔的单词。检查更新的答案,它将解决您的问题:@Pygirl Awesome,谢谢!如果数据是John Doe Mike Steve Johnson,则会产生John Doe、Mike Steve和Johnson。可以吗?所有的名字都有两个部分吗?一个记录可能只是一个名字或姓氏,或者有一个姓氏是两个用连字符分隔的单词。检查更新的答案,它将解决您的问题:@Pygirl Awesome,谢谢!如果数据是John Doe Mike Steve Johnson,则会产生John Doe、Mike Steve和Johnson。可以吗?我得到一个错误,第一个选项的float对象不可下标。第二个选项看起来不错,只是我丢失了每条记录的原始ID。我得到一个错误,第一个选项的float对象不可订阅。第二个选项看起来不错,只是我丢失了每条记录的原始ID。这很好,但是有没有办法保留ID?当然,我已经更新了答案。如果有一条记录只有像Johnson这样的姓,有没有办法保留这些实例?这很好,但是有没有办法保留ID?当然,我已经更新了答案。如果有像约翰逊这样只有姓的记录,有没有办法保存这些实例?
df2 = pd.Series([ f"{a} {b}" for val in df.Name for (a,b) in (zip(val,val[1:]))])
0 John Doe
1 John Doe
1 Doe Mike
1 Mike Smith
2 John Doe
2 Doe Mike
2 Mike Smith
2 Smith Steve
2 Steve Johnson
3 Smith Mike
3 Mike J.
3 J. Doe
3 Doe Johnson
3 Johnson Steve
4 Steve J.
4 J. M
4 M Smith
Name: Name, dtype: object
df2 = pd.DataFrame([ [idx+1, f"{a} {b}"] for idx,val in enumerate(df.Name) for (a,b) in (zip(val,val[1:]))], columns=['ID', 'Names'])