我想更新从html表导出到excel的数据。
问题是,我想保留旧数据。
我有3个温度传感器,每个传感器都有一个网页,我可以在其中获取数据并将其导出到excel文件中。
每个传感器都有多个页面,因为有很多数据。
我设法将所有内容导出到.xlsx文件,但是当我再次启动脚本时,最旧的数据行丢失了,因为该网页仅显示(大约)30天的数据。
功能:
从每个传感器读取1到25的每一页,并将来自传感器的所有数据放入单独的Excel文件中。
应该做什么:
检查html表中的第一行是否与excel表中的第一行匹配,如果为true,则不执行任何操作,如果为false,则在excel表的顶部添加新行。
是的,我知道代码没有很好地优化,因为我与pyton的合作时间不长。非常感谢提供有关网址变量的任何帮助(网址与-> 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!"
感谢您的帮助,对英语不好的情况深表歉意:)
答案 0 :(得分:0)
这可能不是最有效的方法。但是,如果数据中有日期字段,则可以简单地先使用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)