首页 > 解决方案 > 如何使用从 HTML 文件导入的 pandas 从数据集中提取特定列?

问题描述

import requests
import os
import pandas as pd
from bs4 import BeautifulSoup

#Importing html
df = pd.read_html(os.path.expanduser("~/Documents/HTMLSpider/HTMLSpider_test/spotgamma.html"))
print (df['Latest Data'])

我可以在网上找到的所有文档都指出,从数据集中提取特定列需要您在方括号中指定列标题的名称,但是当我尝试这样做时,这会返回 TypeError:

>
    print (df['Latest Data'])
TypeError: list indices must be integers or slices, not str

如果您对数据集的外观感到好奇而不尝试指定列:

     SpotGamma Proprietary Levels Latest Data  ...    NDX    QQQ
0                        Ref Price:        4465  ...  15283    372
1        SpotGamma Imp. 1 Day Move:      0.91%,  ...    NaN    NaN
2        SpotGamma Imp. 5 Day Move:       2.11%  ...    NaN    NaN
3           SpotGamma Gamma Index™:        0.48  ...   0.04  -0.08
4              Volatility Trigger™:        4415  ...  15075    373
5  SpotGamma Absolute Gamma Strike:        4450  ...  15500    370
6               Gamma Notional(MM):        $157  ...     $4  $-397

标签: pythonpandasbeautifulsoup

解决方案


注意

df = pd.read_html(os.path.expanduser("~/Documents/HTMLSpider/HTMLSpider_test/spotgamma.html"))

将返回一个数据框列表,而不是一个。

请参阅:https ://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.read_html.html(“将 HTML 表读入 DataFrame 对象列表。”)

最好做

ldf = pd.read_html(os.path.expanduser("~/Documents/HTMLSpider/HTMLSpider_test/spotgamma.html"))

进而

df = ldf[0]  # replace 0 with the number of the dataframe you want

获取第一个数据框(可能还有更多,请检查len(ldf)您获得了多少以及哪个具有您需要的列)。


推荐阅读