使用Pandas从HTML文件导入数据集后提取指定列触发TypeError的问题求助
解决pandas从HTML读取数据后提取列的TypeError问题
Hey,我看你遇到的问题其实是对pd.read_html()的返回值理解有点偏差,咱们来一步步解决它:
问题根源
pd.read_html()这个函数返回的不是单个DataFrame,而是DataFrame的列表——因为HTML页面里可能存在多个表格,哪怕你的文件里只有一个表格,它也会把这个表格包裹在列表里返回。你直接用df['Latest Data']去索引列表,自然会触发TypeError: list indices must be integers or slices, not str错误,因为列表只能用整数索引或者切片,不能用字符串列名。
解决方案
你只需要先从列表中取出目标DataFrame,再用列名提取数据就行,步骤如下:
- 先获取HTML里的所有表格(返回列表)
- 取出列表中的第一个(也是你数据里唯一的)DataFrame
- 正常用列名提取所需数据
修改后的完整代码如下:
import requests import os import pandas as pd from bs4 import BeautifulSoup # 读取HTML文件,得到包含所有表格的DataFrame列表 df_list = pd.read_html(os.path.expanduser("~/Documents/HTMLSpider/HTMLSpider_test/spotgamma.html")) # 取出列表中的第一个表格(如果有多个表格,你可以用len(df_list)查看数量,再选对应索引) df = df_list[0] # 现在可以正常提取'Latest Data'列了 print(df['Latest Data'])
额外小贴士
如果不确定哪个表格是你要的,可以遍历列表打印每个表格的结构,快速定位:
for idx, table in enumerate(df_list): print(f"=== 表格{idx} ===") print("列名:", table.columns.tolist()) print(table.head(), "\n")
这样你就能精准找到目标表格的索引,避免出错。
内容的提问来源于stack exchange,提问作者Vincent
相关产品推荐
相关产品推荐

