将数据框与Excel中的行进行比较

时间:2019-09-18 16:28:50

标签: python excel pandas

[有人建议这是Pandas Merging 101的副本。我不同意。该页面仅讨论合并两个现有的熊猫。它没有解释如何在excel和现有的熊猫之间进行比较。即使我对两个数据框进行了联接,似乎也需要做更多的工作。我试图找到一种减少需要写多少代码的方法。]

我对Pandas和Dataframes非常陌生,所以我希望我能对如何改善编写的脚本提出一些建议。

我正在尝试编写一个程序,该程序将在数据框中找到与Excel工作表中的行相对应的行。数据框中的行与excel中的行将不按顺序排列,并且在许多情况下甚至不存在。重要的是适当的列中的值匹配。识别出这些匹配项后,我只想将数据框中的匹配行添加到Excel工作表中。

我确实有一个可以正常工作的脚本,但是它并不漂亮,而且我知道必须有一种更好的方法来实现此目的。

这是我用相应信息编写的代码的示例。任何有关如何使它更好的建议将不胜感激。

import pandas as pd
import openpyxl
from openpyxl import load_workbook


wb =load_workbook("test.xlsx")
ws = wb["testsheet"]


data = {'ColA':['BA', 'AG', 'BC', 'AS', 'BW', 'AA'], 
        'ColB':['BA', 'AH', 'BC', 'AS', 'BW', 'AB'],
        'ColC':['BA', 'AI', 'BC', 'AS', 'BW', 'AC']}

df = pd.DataFrame(data)


row_count = len(ws['A'])
for i in range(2, row_count +1):
    for k in range(len(df)):
        if ((ws.cell(i,1).value == df.iloc[k]['ColA']) and 
            (ws.cell(i,2).value == df.iloc[k]['ColB']) and  
            (ws.cell(i,3).value == df.iloc[k]['ColC'])):
            for j in range(0,3):
                ws.cell(i, j + 5).value = df.iloc[k][j]

wb.save("test.xlsx")

这是excel工作表“ testsheet”:

enter image description here

1 个答案:

答案 0 :(得分:1)

  • 类似于检查行的长度以查看需要执行多少次迭代...,也可以检查列{{1}}的长度,以使此脚本更通用和更短。
  • 此外,您可以按列号而不是显式字符串访问“ ColA”。