[英]Writing a (scraped) list of dataframes to single excel sheet
我正在嘗試從網頁列表中抓取 HTML 表格(每頁上只有一個表格)。
這是我的代碼的第一部分:
for i in range(len(urls)):
r = requests.get(urls[i], header)
data = pd.read_html(r.text,index_col=0, header=0)
appended_list.append(data)
'urls' 是一個 url 列表(每個都有一個靜態表)這段代碼有效 - 我得到了一個數據幀列表(appended_list)。
現在,我想將此數據框列表寫入單個 Excel 工作表中。 這是我試過的 -
writer = pd.ExcelWriter('test_1.xlsx', engine='xlsxwriter')
row = 0
for df in appended_list:
df.to_excel(writer,startrow=row,startcol=0)
row = row + len(df.index) + 1
writer.save()
我收到錯誤:
df.to_excel(writer,startrow=row,startcol=0)
AttributeError: 'list' object has no attribute 'to_excel'
似乎正在發生的事情是 append_list 的每個元素(數據幀)仍在作為列表讀取。 如何將這些列表項中的每一個轉換為數據框,以便將它們寫入 Excel 文件?
先感謝您。
根據文檔https://pandas.pydata.org/pandas-docs/version/0.23.4/generated/pandas.read_html.html如果每個元素中確實只有一個 DataFrame,則 append_list 的每個元素本身就是一個列表在這些列表中,您可以:
df = pd.concat([l[0] for l in appended_list])
df.to_excel(writer)
這避免了在列表上循環並通過將所有數據幀連接成一個來保存每次
p.read_html 將 HTML 表讀取到 DataFram 對象列表中。 然后您將這些列表存儲在列表 append_list 中。
如果您確定從每個 url 只獲取一個數據幀,您可以嘗試:
for i in range(len(urls)):
r = requests.get(urls[i], header)
data = pd.read_html(r.text,index_col=0, header=0)
appended_list.append(data[0])
在第 4 行通知 data[0]
或者,如果每個頁面可能有多個數據幀,您可以使用擴展而不是附加。
for i in range(len(urls)):
r = requests.get(urls[i], header)
data = pd.read_html(r.text,index_col=0, header=0)
appended_list.extend(data)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.