下面的代碼只將頁面上的最后一個表格匯出到excel,但是當我運行列印功能時,它會列印所有表格。我的代碼是否存在問題導致無法將所有資料匯出到 excel?
我也試過匯出為 .csv 檔案,但沒有成功。
import pandas as pd
url = 'https://www.vegasinsider.com/college-football/matchups/'
dfs = pd.read_html(url)
for df in dfs:
if len(df.columns) > 1:
df.to_excel(r'VegasInsiderCFB.xlsx', index = False)
#print(df)
uj5u.com熱心網友回復:
你的問題是每次df.to_excel被呼叫時,你都會覆寫檔案,所以只剩下最后一個 df 。您需要做的是使用撰寫器并為每個單獨的作業表指定一個名稱,df例如:
url = 'https://www.vegasinsider.com/college-football/matchups/'
writer = pd.ExcelWriter('VegasInsiderCFB.xlsx', engine='xlsxwriter')
dfs = pd.read_html(url)
counter = 0
for df in dfs:
if len(df.columns) > 4:
counter = 1
df.to_excel(writer, sheet_name = f"sheet_{counter}", index = False)
writer.save()
你可能需要pip install xlsxwriter xlwt讓它作業。
匯出到 csv 永遠行不通,因為 csv 是單個資料表(就像 excel 中的單個作業表),因此在這種情況下,您需要為每個 df 使用新的 csv。
正如評論中所指出的,可以在不更改dfs 的情況下將資料寫入單個作業表,但合并它們可能會好得多:
import pandas as pd
import numpy as np
url = 'https://www.vegasinsider.com/college-football/matchups/'
dfs = pd.read_html(url)
dfs = [df for df in dfs if len(df.columns) > 4]
columns = ["gameid","game time", "team"] list(dfs[0].iloc[1])[1:]
N = len(dfs)
values = np.empty((2*N,len(columns)),dtype=np.object)
for i,df in enumerate(dfs):
time = df.iloc[0,0].replace(" Game Time","")
values[2*i:2*i 2,2:] = df.iloc[2:,:]
values[2*i:2*i 2,:2] = np.array([[i,time],[i,time]])
newdf = pd.DataFrame(values,columns = columns)
newdf.to_excel("output.xlsx",index = False)
我使用了numpy.array物件型別,以便能夠輕松地將子矩陣從原始資料幀復制到其預期位置。我還需要創建一個gameid, 將跨行的游戲連接起來。現在重寫它應該是微不足道的,因此您可以遍歷 url 串列并將它們寫入單獨的作業表。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/328285.html
