如何解决如何使用 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 举报,一经查实,本站将立刻删除。