繁体   English   中英

如何在 Python 上使用 bs4/selenium 从已解析代码中创建 Pandas DataFrame?

[英]How to Create Pandas DataFrame out of Parsed Code using bs4/selenium on Python?

我已经解析了一个表,并想将其中两个变量转换为 Pandas Dataframe 以打印到 excel。

仅供参考:我确实问过类似的问题,但是没有得到彻底的回答。 没有关于如何创建 Pandas DataFrame 的建议。 这就是我问题的重点。

注意:我解析的数据存在小问题。 数据在 output 中多次包含“TEAM”和“SA/G”。

我想在 DataFrame 中的第一个变量是“团队”。

我想在 DataFrame 中的第二个变量是“SA/G”。

到目前为止,这是我的代码:

# imports
from selenium import webdriver      
from bs4 import BeautifulSoup

# make a webdriver object
driver = webdriver.Chrome('C:\webdrivers\chromedriver.exe')

# open some page using get method       - url -- > parameters
driver.get('http://www.espn.com/nhl/statistics/team/_/stat/scoring/sort/avgGoals')

# driver.page_source
soup = BeautifulSoup(driver.page_source,'lxml')
#close driver
driver.close()
#find table
table = soup.find('table')
#find_all table rows
t_rows = table.find_all('tr')
#loop through tr to find_all td
for tr in t_rows:
    td = tr.find_all('td')
    row = [i.text for i in td]
    # print(row)
    # print(row[9])
    # print(row[1], row[9])

    team = row[1]
    sag = row[9]

    # print(team, sag)
    data = [(team, sag)]
    print(data)

这是我想使用 Pandas ZBA834BA059A9A379459C112E 打印到 excel 的最终 output

Team           SA/G
Nashville      30.1
Colorado       33.6
Washington     31.0
...             ...

提前感谢您提供的任何帮助。 我仍在学习并感谢我能得到的任何反馈。

首先在“for循环”中 append 元组进入列表(而不是执行 data=[(x,y)] 在循环之前将数据变量声明为列表data = list()和 append 在循环data.append((x,y)中列出的元组data.append((x,y) )) 并执行以下操作

import pandas as pd
data=[("t1","sag1"),("t2","sag2"),("t3","sag3")]
df = pd.DataFrame(data,columns=['Team','SA/G'])
print(df)

看起来您想从元组列表中创建一个 DataFrame , 此处已回答。 我会像这样更改您的代码:

# Initial empty list
data = []
#loop through tr to find_all td
for tr in t_rows:
    td = tr.find_all('td')
    row = [i.text for i in td]
    team = row[1]
    sag = row[9]
    # Add tuple containing one row of data
    data.append((team, sag))
# Create df from list of tuples
df = pd.DataFrame(data, columns=['Team', 'SA/G'])
# Remove lines where Team value is "TEAM"
df = df[df["Team"] != "TEAM"]

编辑:添加行以删除 df 中的 ("TEAM", "SA/G") 行

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM