gpt4 book ai didi

python - AssertionError : 22 columns passed, 传递的数据有 21 列

转载 作者:太空宇宙 更新时间:2023-11-04 00:43:23 25 4
gpt4 key购买 nike

这是我的代码:

from urllib import urlopen
from bs4 import BeautifulSoup
import pandas as pd

url = "http://www.basketball-reference.com/draft/NBA_2014.html"
html = urlopen(url)
soup = BeautifulSoup(html)
column_headers = [th.getText() for th in soup.findAll('tr',limit=2)[1].findAll('th')]
data_rows = soup.findAll('tr')[2:]
player_data = [[td.getText() for td in data_rows[i].findAll('td')] for i in range(len(data_rows))] #PLAYER DATA

type(soup)
type(data_rows)

df = pd.DataFrame(player_data,columns=column_headers)

错误似乎出现在最后一行。

最佳答案

首先,错误非常简单明了:您的 column_headers 列表有 22 列,但 player_data 条目只有 21 列。所以您需要找出哪一个列丢失,为什么。只需通过视觉比较数据框和标题列表中的条目,就会发现前两列中的一列丢失了。 player_data[0][0] 返回

1, CLE, Andrew Wiggins, University of Kansas,... 但它应该是

1, 1, CLE, Andrew Wiggins, 堪萨斯大学...

问题出在表格本身。导航到该网站,将鼠标悬停在表格上并右键单击:检查。

第一行数据(在“Rk”下方)由 21 个 td 和 1 个 th 元素组成。 “rk”条目实际上是 th 而不是 td 类型:

Screenshot of table of provided data

这就是为什么你的

player_data = [[td.getText() for td in data_rows[i].findAll('td')] for i in range(len(data_rows))] 

跳过第一列,因为它只迭代 td 元素。因此长度不同。我不知道第一栏有多重要;快速修复是从标题列表中删除 Rk 列。

或者,搜索 both td and th elements :

player_data = [[td.getText() for td in data_rows[i].findAll(['td','th'])] for i in range(len(data_rows))]

关于python - AssertionError : 22 columns passed, 传递的数据有 21 列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40855030/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com