首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Difflib组合Excel工作表

使用Difflib组合Excel工作表
EN

Stack Overflow用户
提问于 2016-03-24 22:49:24
回答 1查看 349关注 0票数 0

我一直在尝试根据它们自己的名字列将两个excel表合并在一起。我使用this作为参考。

在df1中,名称列是Local Customer df2,名称列是Client

代码语言:javascript
复制
import difflib
import pandas as pd

path=  'C:/Users/Rukgo/Desktop/Match thing/'

df1=pd.read_excel(path+'2015_TXNs.xls')
df2=pd.read_excel(path+'Pipeline.xls')
df2['Client'] = df2['Client'].apply(lambda x: difflib.get_close_matches(x, df1['Local Customer'])[0])

result = df1.join(df2)

result.to_excel(path+'maybe.xls')

但是,当我运行这个程序时,我会得到以下错误:

代码语言:javascript
复制
File "C:/Users/Rukgo/Desktop/Match Things/untitled3.py", line 16, in <lambda>
df2['Client'] = df2['Client'].apply(lambda x: difflib.get_close_matches(x, df1['Local Customer'])[0])

IndexError: list index out of range
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-03-24 22:55:44

这意味着有时没有找到接近的匹配,但是您需要一个空列表的第一个元素[0]

向lambda函数添加一个条件,以测试是否至少有一个结果。

如果您决定在没有匹配元素的情况下保留原始DataFrame的元素,下面是代码。

代码语言:javascript
复制
def replacement(x, **kwargs):
    matches = difflib.get_close_matches(x, kwargs['l'])
    if ( matches ):
        return matches[0]
    else:
        return x


df2['Client'] = df2['Client'].apply( replacement(x, l=df1['Local Customer'] ) )
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36211291

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档