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

标签 python excel pandas

[有人认为这是 Pandas Merging 101 的重复项。我不同意。该页面仅讨论合并两个现有的 pandas。它没有解释如何在 Excel 和现有的 panda 之间进行比较。即使我对两个数据帧进行了连接,这似乎也需要更多的工作。我试图找到一种方法来减少需要编写的代码量。]

我对 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

最佳答案

  • 类似于检查行的长度以查看需要执行多少次迭代...您还可以检查列的长度 len(df.columns) 来制作此脚本更通用且更短。
  • 此外,您还可以通过列号而不是显式字符串来访问“ColA”。

关于python - 将数据框与 Excel 中的行进行比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57997171/

相关文章:

python - VS 代码 Jupyter 扩展 : Remote notebook not starting

python - 使用 sqlalchemy 从 mysql 获取大量数据的最佳方法是什么?

vba - Excel VBA-获取包含从数组派生的数据的空白消息框

sql - VB6 ADODB.Recordset Record.Count 不起作用/EOF 和 BOF 不可用

python - 在时间序列数据中创建新的 sumproduct 列

python - Pandas reindex 将所有值转换为 NaN

python - 我如何打印这个 elif 字符串

python win32 excel复制工作表并更改复制工作表的名称

python - Pandas 数据框 groupby 的峰度不起作用

python - 将列总计附加到 Pandas DataFrame