Pandas read_html возвращает столбец со значениями NaN в Python - PullRequest
0 голосов
/ 22 января 2019

Я пытаюсь разобрать таблицу, расположенную здесь , используя функцию Pandas read.html.Я был в состоянии разобрать таблицу.Однако емкость столбца вернулась с NaN.Я не уверен, в чем может быть причина. Я хотел бы проанализировать всю таблицу и использовать ее для дальнейших исследований.Так что любая помощь приветствуется.Ниже мой код пока ..

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

Ответы [ 3 ]

0 голосов
/ 22 января 2019

Попробуйте что-то вроде этого (включите 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

Надеюсь, это поможет.

0 голосов
/ 23 января 2019

Ответ Написал @ 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]

Решением было вывести «r», представленное @ anky_91 в строке 1 и строке 4

 print(df4.Capacity.head())

    0    30,343
    1     65000
    2    70,500
    3    36,387
    4     25000
    Name: Capacity, dtype: object
0 голосов
/ 22 января 2019

Pandas может получить только верхний индекс (по любой причине), а не фактическое значение, если вы напечатаете все df1 и проверите столбец Capacity, вы увидите, что некоторые из значений - [1], [2]и т. д. (если у них есть сноски) и NaN в противном случае.

Возможно, вы захотите изучить альтернативы извлечения данных или самостоятельной очистки данных с помощью BeautifulSoup, поскольку Pandas ищет и, следовательно, возвращает неправильные данные.

...