【问题标题】:How to do vlookup on excels(different column names) using python如何使用python对excel(不同的列名)进行vlookup
【发布时间】:2020-05-01 18:39:08
【问题描述】:

专家,我想在具有两个不同列名的两个 Excel 之间执行 vlookup,并且输出列名也不同。

让我们以下面的例子来理解场景 在源excel文件1中,我在位置A的列名是“计算机名”,在源excel文件2中,我在位置B的列名也是“短”。我想执行vlookup(一种sql的左连接)在 excel file1 的“计算机名”列和 excel file2 的“短”列之间。在 vlookup 之后,我想在 excel file1 中添加 vlookup 的输出作为 cloumn 名称作为“CMDB crosscheck”,它位于最终输出 excel 文件下面显示的屏幕打印中的位置 B。请注意,excel file1 的其余所有列都将保留在那里,只是新列将位于 excel file1 中的位置 B

源 Excel 文件 1:

源 Excel 文件2:

输出excel文件:

我正在使用下面的代码,但它不起作用。请您提出建议

import pandas as pd
import numpy as np

avclient_workbook ="AV_Clients1.xlsx"
cmdb_workbook = "cmdb_all.xlsx"

output_workbook = "AVClientCMDBAll.xlsx"
df_avclient_workbook = pd.read_excel(avclient_workbook)
df_cmdb_workbook = pd.read_excel(cmdb_workbook)

#print(df_avclient_workbook.columns)
#print(df_cmdb_workbook.columns)
df_avclient_workbook.rename(columns={'Computer name':'short'}, inplace=True) #just trying to rename it
#not able to achive :(
df_3 = pd.merge(df_avclient_workbook, df_cmdb_workbook[['short', 'short']], on='short',how='left')
print(df_3)

【问题讨论】:

  • 你自己说的,你在找一个类似于SQL join的操作。为什么不使用 pandas.DataFrame.join() 或 pandas.DataFrame.merge() 呢,这取决于更适合您的需求?
  • Stack Overflow Discourages Screenshots。这个问题很可能会被否决。您不鼓励提供帮助,因为没有人愿意重新输入您的数据或代码,而且屏幕截图通常难以辨认。

标签: python excel pandas


【解决方案1】:

所以大家终于用下面的代码完成了。虽然我已经手动添加了列列表,但仍然找到了一种可以动态提供此列列表的方法。

import pandas as pd
import numpy as np
import warnings
warnings.filterwarnings('ignore')

avclient_workbook ="File1.xlsx"
cmdb_workbook = "File2.xlsx"

output_workbook = "File3.xlsx"
df_avclient_workbook = pd.read_excel(avclient_workbook)
df_cmdb_workbook = pd.read_excel(cmdb_workbook)

merged_dataset = pd.merge(df_avclient_workbook, df_cmdb_workbook, how='left',
                          left_on='Computer name',
                          right_on='short')
final_dataset = merged_dataset[df_avclient_workbook.columns]
final_dataset['CMDB crosscheck'] = merged_dataset['short']
#list of column names which i want to populate
final_dataset = final_dataset[["Computer name","CMDB crosscheck","Computer DNS name","IP address","User account","Management server","Group name","Vendor","Product name","Product version","FW policy","Definition version","Server definition","Delta time","Definition date","Delta range","Last connection (UTC)","Last connection range","Last AD connection","AV status","FW status","IPS status","ATP status","Agent GUID","Agent version","Scan engine","FW version","Hotfixes","OS name","OS version","Platform","Platform type","Architecture","Group path","Cloud / infra","Management proxy","Management proxy IP","ITSM name","ITSM priority","ITSM install status","ITSM responsible group","Tags","Excluded tags","Tree sorting","Last update (UTC)","Problem found","Problem description"]]

final_dataset.to_excel(output_workbook, index=False)

#writer.save()

【讨论】:

    猜你喜欢
    • 2012-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-31
    • 2016-05-11
    • 2015-08-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多