Skip to content

Instantly share code, notes, and snippets.

@Honghe
Created April 25, 2019 14:54
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Honghe/fb1f6cc475ccd5b049aeb1c60932c779 to your computer and use it in GitHub Desktop.
Save Honghe/fb1f6cc475ccd5b049aeb1c60932c779 to your computer and use it in GitHub Desktop.
Excel vlookup加速方案

Excel vlookup加速方案

方案

  • 方法1,使用Python merge 在使用Excel时,我用的最多函数就是vlookup;在使用SQL查询的时候,我用的最多应该是join;这两个都有相同的功能,将多表匹配、合并,然后达到对比、查漏等等效果。在pandas里面也有类似的功能函数就是pd.merge()。merge的用法跟SQL中join很像。

https://zhuanlan.zhihu.com/p/30113030

  • 方法2,使用{}返回匹配的整行.
=VLOOKUP($E2,'s2'!$A:$D,{2,3,4},0)
  • 方法3,使用模糊查找.但列得先排序;同时,使用完函数后保存操作耗时间。为何?
=IF(VLOOKUP($E2,'s2'!$A:$D,1,True)=$E2,VLOOKUP($E2,'s2'!$A:$D,2,TRUE), "")

Q&A

    1. 为什么excel插入函数公式计算后的数据不能排序 因为你插入函数计算得到数据后此时该单元格不仅包含这个数据,还包含这个得到数据时所用的公式,这个公式又和你输入公式时所引用的参数联系着,除了数据外这些公式和参数是不能进行排序的,所以你不能排序。 解决方法: 全选这些数据——选择性粘贴——数值——确定即可。
fn = 'bar.xlsx'
# merge via 'name'
data = pd.read_excel(fn, sheet_name=['s1', 's2'], index_col='name', engine='xlrd')
print(data)
s1 = data['s1']
s2 = data['s2']
# sort=False加速有多少?
s_merged = pd.merge(s1, s2, how='left', left_index=True, right_index=True, sort=False)
# save
# engine='xlsxwriter' is best performence?
writer = pd.ExcelWriter('bar_merged.xlsx', engine='xlsxwriter')
s1.to_excel(writer, 's1')
s2.to_excel(writer, 's2')
s_merged.to_excel(writer, 's_merged')
writer.save()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment