我收到一个断言错误,说已经传递了20列,但传递的数据有50列。我知道是什么导致了这个错误,但现在已经很晚了,我不确定如何修复它 - 问题是真的有20个列标题,但50个数字来自行数。我认为它可能与循环有关,但任何帮助都会受到赞赏,因为我想这很简单,但我不太确定如何解决它。
from bs4 import BeautifulSoup
import requests
import pandas as pd
import time
playerData = []
for i in range(6):
initialURL = 'https://www.fangraphs.com/leaders.aspx?pos=all&stats=sta&lg=all&qual=0&type=8&season=2017&month=0&season1=2017&ind=0&team=0&rost=0&age=0&filter=&players=0&sort=7,d&page=' + str(i) +'_50'
r = requests.get(initialURL)
soup = BeautifulSoup(r.text, 'html.parser')
statistics = soup.find("table", {"class" : "rgMasterTable"})
statistics.findAll('th')
column_headers = [th.getText() for th in soup.findAll('th')]
data = statistics.findAll('tr')[3:]
pitcherStatistics = [[td.text.strip() for td in data[a].findAll('td')]
for a in range(len(data))]
playerData.append(pitcherStatistics)
print(playerData)
df = pd.DataFrame(playerData, columns=column_headers)
df.to_csv("Starting Pitchers.csv", index=False)
答案 0 :(得分:0)
看起来playerData
是3D,但DataFrame只是2D。我想你的问题是你在每个"行"中使用了3 tr
个元素。当只有1可以适合。您需要保留playerData
2D,可能是单独添加三个tr
元素,而不是作为子列表。