首页 > 解决方案 > 用 html 表的第一行更新 excel 文件(pandas/python)

问题描述

我想更新我从 html 表导出到 excel 的数据。
问题是,我想保留旧数据。

我有 3 个温度传感器,每个都有一个网页,我可以在其中获取数据并将其导出到 excel 文件中。
每个传感器都有多个页面,因为有很多数据。

我设法将所有内容导出到 .xlsx 文件,但是当我再次启动脚本时,最旧的数据行会丢失,因为网页只显示(大约)30 天的数据。

它的作用:
为每个传感器从 1 到 25 读取每一页,将来自传感器的所有数据放入单独的 excel 文件中。

它应该做什么:
检查 html 表中的第一行是否与 excel 表中的第一行匹配,如果为 true,则不执行任何操作,如果为 false,则在 excel 表的顶部添加新行。

是的,我知道代码没有得到很好的优化,因为我没有使用 pyton 很长时间。非常感谢对 url 变量的任何帮助(url 不完全相同 tho -> page=n 和 deviceid=x )

这是代码:

import pandas as pd

print "Starting fenster 3.."


fenster_3_seite_25, = pd.read_html("URL", header=0)
... ##deleted other rows for overview
fenster_3_seite_1, = pd.read_html("URL", header=0)

print "Collecting data for fenster 3 done! Creating file fenster_3.xlsx"

fenster_komplett = pd.concat([fenster_3_seite_1, fenster_3_seite_2, fenster_3_seite_3, fenster_3_seite_4, fenster_3_seite_5, fenster_3_seite_6, fenster_3_seite_7, fenster_3_seite_8, fenster_3_seite_9, fenster_3_seite_10, fenster_3_seite_11, fenster_3_seite_12, fenster_3_seite_13, fenster_3_seite_14, fenster_3_seite_15, fenster_3_seite_16, fenster_3_seite_17, fenster_3_seite_18, fenster_3_seite_19, fenster_3_seite_20, fenster_3_seite_21, fenster_3_seite_22, fenster_3_seite_23, fenster_3_seite_24, fenster_3_seite_25], ignore_index=True)
fenster_komplett.to_excel("fenster_3.xlsx", index=False)

print "Fenster 3 done!"

print "Starting privat.."


privat_seite_25, = pd.read_html("URL", header=0)
... ##deleted other rows for overview
privat_seite_1, = pd.read_html("URL", header=0)

print "Collecting data for privat done! Creating file privat.xlsx"

privat_komplett = pd.concat([privat_seite_1, privat_seite_2, privat_seite_3, privat_seite_4, privat_seite_5, privat_seite_6, privat_seite_7, privat_seite_8, privat_seite_9, privat_seite_10, privat_seite_11, privat_seite_12, privat_seite_13, privat_seite_14, privat_seite_15, privat_seite_16, privat_seite_17, privat_seite_18, privat_seite_19, privat_seite_20, privat_seite_21, privat_seite_22, privat_seite_23, privat_seite_24, privat_seite_25], ignore_index=True)
privat_komplett.to_excel("privat.xlsx", index=False)

print "Privat done!"

print "Starting tuer 3.."


tuer_3_seite_25, = pd.read_html("URL", header=0)
... ##deleted other rows for overview
tuer_3_seite_1, = pd.read_html("URL", header=0)

print "Collecting data for tuer_3 done! Creating file tuer_3.xlsx"

tuer_komplett = pd.concat([tuer_3_seite_1, tuer_3_seite_2, tuer_3_seite_3, tuer_3_seite_4, tuer_3_seite_5, tuer_3_seite_6, tuer_3_seite_7, tuer_3_seite_8, tuer_3_seite_9, tuer_3_seite_10, tuer_3_seite_11, tuer_3_seite_12, tuer_3_seite_13, tuer_3_seite_14, tuer_3_seite_15, tuer_3_seite_16, tuer_3_seite_17, tuer_3_seite_18, tuer_3_seite_19, tuer_3_seite_20, tuer_3_seite_21, tuer_3_seite_22, tuer_3_seite_23, tuer_3_seite_24, tuer_3_seite_25], ignore_index=True)
tuer_komplett.to_excel("tuer_3.xlsx", index=False)

print "Tuer 3 done!"

感谢您的帮助,抱歉英语不好:)

标签: pythonhtmlexcelpandas

解决方案


这可能不是最有效的方法。但是,如果数据中有日期字段,则可以先使用 pd.read_excel() 导入旧数据,然后将其添加到 pd.concat() 函数中,然后对其执行 drop_duplicates() 。请参见下面的示例。

existing_excel = pd.read_excel(excel_path,sheet_name)
final_excel = pd.concat([existing_excel,new_pd1,new_pd2])
final_excel.drop_duplicates(inplace=True)
final_excel.to_excel(excel_path)

推荐阅读