我有两个dataframes,它们的列中有相似的数据,但是列名不同。我需要确定它们是否是相似的列。 colName1 = [‘movieName’,‘movieRating’,‘movieDirector’,‘movieReleaseDate’) colName2 =['名称',‘release_date’,‘导演’) 我的方法是标记colName1并使用它们进行比较 - levenshtein / Jaccard距离 -使用TFIDF评分查找相似性。 但是这个方法适用于col名称与eg名称相似的情况。movieName和名称。假设您有'IMDB_Score'和'average_rating',这种方法是行不通的。 是否有办法利用word2vec解决上述问题。 问题来源StackOverflow 地址:/questions/59386393/is-there-any-inbuilt-pandas-operation-which-can-find-similar-columns-of-two-diff
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
在处理列名相似性问题时,使用word2vec确实是一个有创意的方法,因为它能够捕捉词汇之间的语义关系。尽管Pandas本身没有内置功能直接实现这一点,但你可以结合使用gensim等库来实现基于word2vec的列名相似度比较。
以下是一个简化的示例流程,说明如何利用word2vec来解决你的问题:
安装必要的库: 首先确保你已经安装了gensim
库,用于训练word2vec模型。如果未安装,可以通过pip安装:
pip install gensim
构建Word2Vec模型: 为了应用word2vec,你需要一个包含大量文本数据的语料库来训练模型。理想情况下,这个语料库应该与你的列名所处的领域相关。然而,对于列名这种特定且有限的词汇集,可能需要创造性地构造或假设一个小型的、相关的词汇环境。这里我们简化处理,直接用列名作为训练数据,虽然这可能不是最理想的方案,但在缺乏更丰富语料的情况下可以作为一个尝试。
from gensim.models import Word2Vec
from gensim.test.utils import get_tmpfile
# 假设有一个包含所有可能列名的大列表,这里我们直接使用colName1和colName2
all_column_names = colName1 + colName2
sentences = [[word] for word in all_column_names] # gensim要求输入为句子列表
model = Word2Vec(sentences, min_count=1) # 训练word2vec模型
model.save("column_name_model") # 保存模型以便复用
计算列名相似度: 使用训练好的word2vec模型,你可以通过词向量间的余弦相似度来衡量列名的相似性。
from gensim.similarities import cosine
def column_similarity(word1, word2, model):
return cosine(model.wv[word1], model.wv[word2])
# 示例:比较'movieRating'和'average_rating'
sim = column_similarity('movieRating', 'average_rating', model)
print(f"Similarity between 'movieRating' and 'average_rating': {sim}")
请注意,由于word2vec依赖于大量的上下文信息来学习高质量的词向量,仅用列名进行训练可能无法得到非常准确的语义表示,尤其是对于那些含义抽象或者领域特定的词汇。因此,这种方法的效果可能会受限。在实际应用中,可能还需要考虑其他技术,如预先训练好的word embeddings(如果存在针对你领域的预训练模型)、TF-IDF加权的Jaccard相似度或其他字符串匹配算法的组合策略,以提高识别相似列的准确性。