熊猫read_html()在特定列上返回“ nan”

时间:2019-07-07 00:40:06

标签: python pandas

我正在使用熊猫抓取网站,但它会返回一整个列,其中包含'nan'个值,而不是正确的值。我尝试更改多个read_html()参数,例如flavor,converters和na_values均未成功。我注意到问题列的html代码不同,它们的其余部分为'td class='类型,而未被正确读取的则为'td data-behavior='。当我简单地将表格复制/粘贴到excel中时,一切都可以粘贴了。我将不胜感激。

我尝试更改read_html()上的某些参数,但未成功。我也尝试过使用lxml / xpath来获取表,但是也没有成功。

week_data = pd.read_html('https://www.espn.co.uk/nfl/fixtures/_/week/2/seasontype/1',
                          converters={'time': str})

该列应包含包含比赛时间的字符串。

2 个答案:

答案 0 :(得分:2)

他们将日期时间嵌入到data-date属性中,因此,除了求助于硒之外,另一种选择就是简单地将其拉出,并使用beautifulsoup粘贴到td元素中。

from bs4 import BeautifulSoup
import requests
import pandas as pd
import dateutil
from datetime import datetime

espn_page = requests.get('https://www.espn.co.uk/nfl/fixtures/_/week/2/seasontype/1')
soup = BeautifulSoup(espn_page.content, 'html.parser')
espn_schedule = soup.find('div', {'class': 'main-content'})
for td in espn_schedule.find_all('td', {'data-behavior': 'date_time'}):
    utc = dateutil.parser.parse(td.get('data-date'))
    localtime = utc.astimezone(dateutil.tz.gettz())
    td.string = localtime.strftime("%I:%M")


df = pd.read_html(str(espn_schedule))
print(df[0].columns)
print(df[0][df[0].columns[2]])

答案 1 :(得分:0)

您的代码可以完美运行,但是我宁愿需要在'href'元素之后包含的文本,即'6:00 PM':

所以我这样修改了您的代码:

for td in espn_schedule.find_all('a', {'data-dateformat': 'time1'}):
    td.string = td.get('href')

我成功地找到了想要的元素,只是我不知道如何在其后提取文本(即“ 6:00 PM”)。我该怎么办?