Чтобы продемонстрировать проблему, попробуйте напечатать строку:
print(row)
Первый список будет напечатан пустым, и поэтому возникает ошибка.Фрейм данных ожидает 7 значений, но вы предоставляете ему нулевые значения.Хотя решение Jezrael более элегантно, вы можете внести это изменение, чтобы оно работало:
draft2018 ="https://en.wikipedia.org/wiki/2018_NBA_draft"
draftpage =urllib.request.urlopen(draft2018)
soup=bs.BeautifulSoup(draftpage,"html.parser")
columns = ['Round', 'Pick', 'Player', 'Position',
'Nationality', 'Team', 'School/club team']
df = pd.DataFrame(columns=columns)
table = soup.find("table",{"class":"wikitable sortable plainrowheaders"}).tbody
print(table)
trs = table.find_all("tr")
for tr in trs:
tds = tr.find_all('td')
row = [td.text.replace('\n','') for td in tds]
if len(row) < 7:
continue
# print(row)
df = df.append(pd.Series(row, index=columns), ignore_index=True)