Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python数据帧中匹配和比较字符串_Python_Pandas - Fatal编程技术网

在Python数据帧中匹配和比较字符串

在Python数据帧中匹配和比较字符串,python,pandas,Python,Pandas,我有两个数据帧。可以使用系统上某些字段的当前值的API来提取值。另一个具有这些字段的实际当前值。示例:系统上的名称和纸上的名称。我已经在common列中合并了这两个名称,但现在我正在尝试比较Python上的名称,看看它们是否近似匹配和/或是否需要更新。我有办法做到这一点吗?我相信这可以通过使用isnumber(搜索(…)在excel上完成 不区分大小写,可能考虑缩写(我可以编一个字典)来比较文本字符串 我的数据帧外观和所需结果的示例: .tg{边框折叠:折叠;边框间距:0;} .tg td{

我有两个数据帧。可以使用系统上某些字段的当前值的API来提取值。另一个具有这些字段的实际当前值。示例:系统上的名称和纸上的名称。我已经在common列中合并了这两个名称,但现在我正在尝试比较Python上的名称,看看它们是否近似匹配和/或是否需要更新。我有办法做到这一点吗?我相信这可以通过使用isnumber(搜索(…)在excel上完成

不区分大小写,可能考虑缩写(我可以编一个字典)来比较文本字符串

我的数据帧外观和所需结果的示例:


.tg{边框折叠:折叠;边框间距:0;}
.tg td{字体系列:Arial,无衬线;字体大小:14px;填充:10px 5px;边框样式:实心;边框宽度:1px;溢出:隐藏;分词:正常;边框颜色:黑色;}
.tg th{字体系列:Arial,无衬线;字体大小:14px;字体大小:正常;填充:10px 5px;边框样式:实心;边框宽度:1px;溢出:隐藏;分词:正常;边框颜色:黑色;}
.tg.tg-0lax{文本对齐:左;垂直对齐:上}
系统名称
当前名称
匹配
1.
苹果信息技术
苹果国际信息技术公司
不
2.
IBM国际集团
IBM国际集团
对

计算相似度并返回最高匹配概率可能是一个好方法

首先,您需要进行一些数据清理,例如删除特殊字符,将所有字符串转换为小写,然后使用相似性进行搜索

st1 = 'apple information technology'
st2 = 'apple international information technology'

from difflib import SequenceMatcher
SequenceMatcher(None, st1, st2).ratio() 

也许一个好方法是计算相似度,并返回最高的匹配概率

首先,您需要进行一些数据清理,例如删除特殊字符,将所有字符串转换为小写,然后使用相似性进行搜索

st1 = 'apple information technology'
st2 = 'apple international information technology'

from difflib import SequenceMatcher
SequenceMatcher(None, st1, st2).ratio() 

你可以在这里了解更多关于字符串相似性的差异

我只是想为您提供一个应用程序,以防您想使用pandas和您的度量来尝试不同的方法

import pandas as pd
from difflib import SequenceMatcher
df=pd.DataFrame({'Name on System':['APPLE INFORMATION TECHNOLOGY','IBM Intl group'],'Current Name':['Apple International Information Technology','IBM International Group']})
在函数中定义度量

def similiarity_ratio(row):
    return SequenceMatcher(None, row['Name on System'].lower(), row['Current Name'].lower()).ratio() 

df['Match']=df.apply(lambda x:similiarity_ratio(x),axis=1)
print(df)
输出

Current Name                                    Name on System                 Match
0   Apple International Information Technology  APPLE INFORMATION TECHNOLOGY  0.800000
1   IBM International Group                     IBM Intl group                0.756757

你可以在这里了解更多关于字符串相似性的差异

我只是想为您提供一个应用程序,以防您想使用pandas和您的度量来尝试不同的方法

import pandas as pd
from difflib import SequenceMatcher
df=pd.DataFrame({'Name on System':['APPLE INFORMATION TECHNOLOGY','IBM Intl group'],'Current Name':['Apple International Information Technology','IBM International Group']})
在函数中定义度量

def similiarity_ratio(row):
    return SequenceMatcher(None, row['Name on System'].lower(), row['Current Name'].lower()).ratio() 

df['Match']=df.apply(lambda x:similiarity_ratio(x),axis=1)
print(df)
输出

Current Name                                    Name on System                 Match
0   Apple International Information Technology  APPLE INFORMATION TECHNOLOGY  0.800000
1   IBM International Group                     IBM Intl group                0.756757

你的比较标准是什么?它们不是精确的弦,一个是,另一个是,现在你们在比较哪个轴?行还是列?@Chris我在比较列,所以IBM Intl group和IBM InternationalGroup@mad_近似匹配,因此任何高于某个比率预定阈值的匹配都将量化匹配?您的比较标准是什么?它们不是精确的弦,一个是,另一个是,现在你们在比较哪个轴?行还是列?@Chris我在比较列,所以IBM Intl group和IBM InternationalGroup@mad_近似匹配,因此任何高于某个比率的预定阈值的匹配都将量化匹配?可能重复感谢!将探索此包Hanks!将探索此软件包谢谢!difflib似乎是要探索的软件包。让我们看看它是否能满足我的需要。再次感谢您的帮助和指导。谢谢!difflib似乎是要探索的软件包。让我们看看它是否能满足我的需要。再次感谢您的帮助和指导。