pandas - 通过 DataFrame 进行模糊匹配和迭代
问题描述
我有这两个数据框:我想将姓氏字符串与相应的名称进行模糊匹配
dico = {'Name': ['Arthur','Henri','Lisiane','Patrice'],
"Age": ["20","18","62","73"],
"Studies": ['Economics','Maths','Psychology','Medical']
}
dico2 = {'Surname': ['Henri2','Arthur1','Patrice4','Lisiane3']}
dico = pd.DataFrame.from_dict(dico)
dico2 = pd.DataFrame.from_dict(dico2)
我想将姓氏字符串与相应的名称进行模糊匹配,以得到如下输出
Name Surname Age Studies
0 Arthur Arthur1 20 Economics
1 Henri Henri2 18 Maths
2 Lisiane Lisiane3 62 Psychology
3 Patrice Patrice4 73 Medical
到目前为止,这是我的代码:
dico['Surname'] = []
for i in dico2:
lst = [0, 0, 0]
for j in dico:
if lst[0] < fuzz.ratio(i,j):
lst[0] = fuzz.ratio(i,j)
lst[1] = i
lst[2] = j
dico['Surname'].append(i)
但我得到一个ValueError: Length of values (0) does not match length of index (4)
,我不明白为什么。谢谢 !
解决方案
dico = {'Name': ['Arthur','Henri','Lisiane','Patrice'],
"Age": ["20","18","62","73"],
"Studies": ['Economics','Maths','Psychology','Medical']
}
dico2 = {'Surname': ['Henri2','Arthur1','Patrice4','Lisiane3']}
dico = pd.DataFrame.from_dict(dico)
dico2 = pd.DataFrame.from_dict(dico2)
temp = pd.DataFrame()
for x in range (0, len(dico.Name)):
name_str = dico.Name[x]
temp = pd.concat([temp, dico2[dico2.Surname.str.contains(name_str)].Surname])
temp.columns=['Surname']
temp = temp.reset_index(drop = True)
dico = pd.concat([dico, temp], axis=1)
推荐阅读
- spring-batch - 自定义 ItemWriter 以像 CompositeWriter 一样工作以将数据写入 db 和 xml
- bash - 为什么 extglob "+(*/)A" 不像 "find -name A" 那样工作?
- android - Android UI 测试无法解析以下活动:意图
- javascript - 为 VueJS 应用程序实现 manifest.json 文件以设置条件
- powershell - 将某种类型的文件从一个文件夹移动到另一个文件夹
- java - 从 Java Arraylist 中删除
- react-native - 按钮上的 KeyboardAwareScrollView
- android - 使存储库在 Clean Architecture 的域层中不可见
- android - 是否可以避免应用程序关闭的活动?
- php - 自定义帖子查看计数器 WordPress