簡體   English   中英

將數據框的(刮取的)列表寫入單個 Excel 工作表

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM