python - 用 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!"
感谢您的帮助,抱歉英语不好:)
解决方案
这可能不是最有效的方法。但是,如果数据中有日期字段,则可以先使用 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)
推荐阅读
- javascript - 当状态改变时,React 不会重新渲染组件
- python - 无法导入 ctypes - 架构不匹配?
- javascript - 由于浏览器取消请求,Chrome 扩展无法加载
- firebase - Firebase 客户端对您的实时数据库的访问权限将在 X 天后到期
- c# - 通过 Outlook 发送电子邮件
- generics - 以元组结构的类型作为参数调用泛型函数是什么意思?
- angular - 在 Angular 7 注册表单错误处理中出现错误,例如缺少电子邮件@
- node.js - NodeJS 12.x:AWS Greengrass 中未找到错误
- sqlite - 如何在 Ubuntu 18.04 上安装或升级到 sqlite 3.33.0?
- apostrophe-cms - 如何强制撇号 cms 中的页面树?