[英]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.