python - 将数据框与 Excel 中的行进行比较
问题描述
[有人建议这是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”:
解决方案
- 类似于您检查行的长度以查看需要执行多少次迭代......您还可以检查列的长度
len(df.columns)
以使该脚本更通用和更短。 - 此外,您可以通过列号而不是显式字符串访问“ColA”。
推荐阅读
- react-native - React Native - 通过单击flatList中的项目导航到详细信息屏幕?
- c++ - 了解 OpenGL glPushMatrix 和 glPopMatrix
- reactjs - queryCache.find() 未定义
- .net - ProgramData 文件夹在另一个进程 (updater.exe) 访问后无法访问
- javascript - 当我从 javascript 或 Jquery 调用 rest api 时,出现错误
- python - 收集熊猫数据框中特定列值的所有行
- linux - 在 Postgres docker 容器中启动系统服务
- jquery - 带有 CSS 和 Jquery 的多面翻转卡片
- flutter - 如何在 Flutter 中捕获并报告渲染库捕获的异常?
- python - 烧瓶中的身份验证错误登录名或密码