长度不匹配:预期轴有 5 个元素,新值有 8 个元素
Length mismatch: Expected axis has 5 elements, new values have 8 elements
我正在尝试通过 Web 抓取具有不同部分的同一网页来创建 Dataframe
,但是在尝试表示列时,出现此错误:
"Length mismatch: Expected axis has 5 elements, new values have 8 elements"
url='https://money.cnn.com/magazines/fortune/fortune500_archive/full/1955/1.html'
webcontent=urlopen(url)
html_page=webcontent.read()
soup=BeautifulSoup(html_page, "lxml")
table=soup.select("table")[0]
rows= table.select('tr')
table_data=[]
for row in rows:
td_tag=row.select('td')
row_values=[value.string for value in td_tag]
table_data.append(row_values)
data=pd.DataFrame(table_data[1:])
cols=[header.string for header in table.select('th')]
data.columns= cols
data.head()
非常感谢您的帮助!
我认为可能页面内容已更改。
有两个问题:
1. 在 table_data
中,您想要的第一项 ['1', 'General Motors', '9,823.5', '806.0']
从第 7 项开始
2. 你只需要 [header.string for header in table.select('th')]
['Rank', 'Company', None, None, 'Rank', 'Company', 'Rank', 'Company']
中的最后 4 项
data=pd.DataFrame(table_data[6:])
cols=[header.string for header in table.select('th')][-4:]
data.columns= cols
data.head()
Rank Company Rank Company
0 1 General Motors 9,823.5 806.0
1 2 Exxon Mobil 5,661.4 584.8
2 3 U.S. Steel 3,250.4 195.4
3 4 General Electric 2,959.1 212.6
4 5 Esmark 2,510.8 19.1
我正在尝试通过 Web 抓取具有不同部分的同一网页来创建 Dataframe
,但是在尝试表示列时,出现此错误:
"Length mismatch: Expected axis has 5 elements, new values have 8 elements"
url='https://money.cnn.com/magazines/fortune/fortune500_archive/full/1955/1.html'
webcontent=urlopen(url)
html_page=webcontent.read()
soup=BeautifulSoup(html_page, "lxml")
table=soup.select("table")[0]
rows= table.select('tr')
table_data=[]
for row in rows:
td_tag=row.select('td')
row_values=[value.string for value in td_tag]
table_data.append(row_values)
data=pd.DataFrame(table_data[1:])
cols=[header.string for header in table.select('th')]
data.columns= cols
data.head()
非常感谢您的帮助!
我认为可能页面内容已更改。
有两个问题:
1. 在 table_data
中,您想要的第一项 ['1', 'General Motors', '9,823.5', '806.0']
从第 7 项开始
2. 你只需要 [header.string for header in table.select('th')]
['Rank', 'Company', None, None, 'Rank', 'Company', 'Rank', 'Company']
data=pd.DataFrame(table_data[6:])
cols=[header.string for header in table.select('th')][-4:]
data.columns= cols
data.head()
Rank Company Rank Company
0 1 General Motors 9,823.5 806.0
1 2 Exxon Mobil 5,661.4 584.8
2 3 U.S. Steel 3,250.4 195.4
3 4 General Electric 2,959.1 212.6
4 5 Esmark 2,510.8 19.1