熊猫read_html在Python中返回具有NaN值的列

时间:2019-01-21 22:32:37

标签: python html pandas html-parsing wikipedia

我正在尝试使用Pandas read.html函数解析位于here的表。我能够解析表。但是,列容量用NaN返回。我不确定这可能是什么原因,我想解析整个表格并将其用于进一步研究。因此,任何帮助表示赞赏。下面是到目前为止的代码。

wiki_url='Above url'
df1=pd.read_html(wiki_url,index_col=0)

3 个答案:

答案 0 :(得分:1)

尝试这样的操作(将flavor作为bs4包括在内)

df = pd.read_html(r'https://en.wikipedia.org/wiki/List_of_NCAA_Division_I_FBS_football_stadiums',header=[0],flavor='bs4')

df = df[0]
print(df.head())

   Image                                 Stadium         City State  \
0    NaN                  Aggie Memorial Stadium   Las Cruces    NM   
1    NaN                               Alamodome  San Antonio    TX   
2    NaN  Alaska Airlines Field at Husky Stadium      Seattle    WA   
3    NaN                      Albertsons Stadium        Boise    ID   
4    NaN                Allen E. Paulson Stadium   Statesboro    GA   

               Team     Conference   Capacity  \
0  New Mexico State    Independent  30,343[1]   
1              UTSA          C-USA      65000   
2        Washington         Pac-12  70,500[2]   
3       Boise State  Mountain West  36,387[3]   
4  Georgia Southern       Sun Belt      25000   
.............................
.............................

要替换方括号下的任何内容,请使用:

df.Capacity = df.Capacity.str.replace(r"\[.*\]","")
print(df.Capacity.head())

0    30,343
1     65000
2    70,500
3    36,387
4     25000

希望这会有所帮助。

答案 1 :(得分:0)

Pandas只能获取上标(无论出于何种原因)而不是实际值,如果您打印所有df1并检查“容量”列,您将看到其中一些值为[1],[2]等等(如果有脚注),否则为NaN。

由于熊猫正在查找并因此返回错误的数据,因此您可能想研究使用BeautifulSoup获取数据或自己抓取数据的替代方法。

答案 2 :(得分:0)

答案@ anky_91发表是正确的。我想尝试另一种方法而不使用Regex。下面是我不使用Regex的解决方案。

    df4=pd.read_html('https://en.wikipedia.org/wiki/List_of_NCAA_Division_I_FBS_football_stadiums',header=[0],flavor='bs4')
    df4 = df4[0]

解决方案是取出@ anky_91在第1行和第4行中显示的“ r”

 print(df4.Capacity.head())

    0    30,343
    1     65000
    2    70,500
    3    36,387
    4     25000
    Name: Capacity, dtype: object