如何使用 FuzzyWuzzy 检查从一列到其他多列的缺失词?

如何解决如何使用 FuzzyWuzzy 检查从一列到其他多列的缺失词?

我有一列 item_composition 包含不同的项目,我想检查 item composition 中的单词是否可以在另外 3 列中用于 ex A,B 。

item_composition A B
硬脂酸;锌;季戊四醇 季戊四醇

示例表:Example Sheet

在上表中,Stearic acid ; zinc 在 A 列和 B 列中均不可用,因此我应该在输出中打印 Stearic acid ; zinc

import pandas as pd
import numpy as np
from fuzzywuzzy import process,fuzz
ramen = pd.read_excel('Material_composition_costdriver_mapping_icis_ihs.xlsx')
ramen.head()


for col in ramen[['item_composition_in_english','formula_composition_list','composition_icis_index_matches','composition_ihs_index_matches']]:
    ramen[col] = ramen[col].str.strip()
    print('Number of unique values in ' + str(col) +': ' + str(ramen[col].nunique()))

我没有找到满足我要求的任何解决方案。任何帮助将不胜感激。

解决方法

您可以使用以下代码。这将创建两个集合并计算差异。值得注意的是,项目的顺序不一定是守恒的。如果这是一个问题,还有其他替代方法,但我发现这种方法非常简约且高效。

ramen = pd.DataFrame([['Stearic acid ; zinc ; Pentaerythritol','Pentaerythritol',None]],columns=['item_composition','A','B'])
ramen

def check_items(s):
    items = s['item_composition'].split(' ; ')
    ref_items = s.drop('item_composition')
    return ' ; '.join(set(items)-set(ref_items))

ramen.apply(check_items,axis=1)

输入:

                        item_composition                A     B
0  Stearic acid ; zinc ; Pentaerythritol  Pentaerythritol  None

输出:

0    zinc ; Stearic acid

编辑:这是一个更新版本,用于输入类似于您提供的文件的文件(我想不存在评论,也不存在“公式缺失索引”列),并将输出导出为带有额外列的 xlsx

def check_items(s,col='formula_composition_list',ref_columns=['A','B','C','D']):
    import re
    items = re.split(' *; *',s[col])
    ref_items = s[ref_columns].dropna().str.strip()
    return ' ; '.join(set(items)-set(ref_items))

files = ['example.xlsx'] ## add other files in list
                         ## or use another way to list files
                         ## such as the glob module

for f in files:
    df = pd.read_excel(f)
    df['formulae_missing_indices'] = df.apply(check_items,axis=1)
    df.to_excel(f[:-5]+'_out.xlsx')

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?