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

2024-09-27 00:17:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用pandas来抓取一个网站,但是它返回一个包含'nan'值的整列,而不是正确的值。我尝试过更改几个read_html()参数,例如风味、转换器和na值,但没有成功。我注意到,问题列的html代码的不同之处在于,它们的其余部分是'td class='类型,而没有被正确读取的html代码是'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})

列应该包含包含匹配时间的字符串。在


Tags: 代码类型pandasreaddata参数网站粘贴
2条回答

您的代码工作得很好,但我更需要包含在'href'元素之后的文本,即'6:00 PM':

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

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

我成功地找到了我想要的元素,只是我不知道如何在它之后提取文本(即“下午6:00”)。我怎么能做到?

他们将日期时间嵌入到data date属性中,因此另一个选择不是求助于selenium,而是简单地将该属性提取出来并使用beauthulsoup将其粘贴到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]])

相关问题 更多 >

    热门问题