【问题标题】:Length mismatch: Expected axis has 5 elements, new values have 8 elements长度不匹配:预期轴有 5 个元素,新值有 8 个元素
【发布时间】:2020-09-09 19:31:40
【问题描述】:

我正在尝试从网络创建一个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()

非常感谢您的帮助!

【问题讨论】:

    标签: python dataframe web-scraping beautifulsoup urllib


    【解决方案1】:

    我认为页面内容可能已更改。
    有两个问题:
    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
    

    【讨论】:

    • 谢谢!这让我的代码运行!您介意解释一下为什么使用 [6:] 和 [-4:]
    • @user13599115 添加说明
    猜你喜欢
    • 2020-07-10
    • 1970-01-01
    • 2020-12-18
    • 2017-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-23
    • 2018-09-21
    相关资源
    最近更新 更多