我有一组来自 CMS (Medicare) 的 Excel 电子表格,我想对其进行分析,并已使用 pandas 将它们成功导入到数据框中。不幸的是,列名不统一,许多相似,但由于随机空格、新行或额外信息而有所不同。示例:
- “血管或循环系统疾病”
- “血管或循环系统疾病 (CC 104-106)”
- '血管或循环系统疾病'
或
- '身份证\n号码'
- '身份证\n号码'
- '身份证号码'
我会简单地单独更改列的名称 pandas: Merge two columns with different names? ,但我有超过 350 列,并且它们的列名将来很可能会更改。
一些想法是使用正则表达式来创建案例来匹配名称,但我发现很难捕获所有案例并且将来可能会遇到新案例。另一个想法是使用 NLP 来软匹配列。
有什么建议或图书馆吗?谢谢!
请您参考如下方法:
您可以使用库中内置的 difflib 比较字符串之间的相似性:
from difflib import SequenceMatcher
def get_sim_ratio(x, y):
return SequenceMatcher(None, x, y).ratio()
print(get_sim_ratio('Vascular or Circulatory Disease', 'Vascular or Circulatory Disease (CC 104-106)'))
print(get_sim_ratio('Endocrine Disease', 'Vascular or Circulatory Disease (CC 104-106)'))
这个输出:
0.8266666666666667
0.36065573770491804
使用它的输出,您可以设置一定级别的灵敏度来合并列(即如果输出 > .5 -> 合并)
