【发布时间】:2016-12-20 04:53:53
【问题描述】:
有没有办法将我从网上抓取的数据转换成 pandas DataFrame?
抓取的数据是股票基本面数据,例如。 abt: 2.71 6.00 abt = 股票代码,2.71 = 市账率和 6.00 = PEG 比率
我尝试用空数据框声明一个变量并使用.append() 函数但没有运气
我猜数据应该先以某种方式转换,然后才能传递给数据框,但我现在知道如何去做了。
根据 cmets 的建议重做代码,现在数据框是空的???
import time
import urllib.request
import urllib.parse
import pandas as pd
sp500short = ['a', 'aa', 'aapl', 'abbv', 'abc', 'abt', 'ace', 'aci', 'acn', 'act', 'adbe', 'adi', 'adm', 'adp']
#stock = 'a'
data = []
color_list = ['<span style="color:#aa0000;">', '<span style="color:#008800;">']
color_close = '</span>'
def finvizPBStats(stock):
try:
sourceCode = urllib.request.urlopen('http://finviz.com/quote.ashx?t='+stock).read()
sourceCodeString = sourceCode.decode()
pbr = sourceCodeString.split('P/B</td><td width="8%" class="snapshot-td2" align="left"><b>')[1].split('</b></td>')[0]
for color in color_list:
if color in pbr:
pbr = pbr.split(color)[1].split(color_close)[0]
pbr = float(pbr)
except Exception as e:
if Exception:
pass
return
def finvizPEGStats(stock):
try:
sourceCode = urllib.request.urlopen('http://finviz.com/quote.ashx?t='+stock).read()
sourceCodeString = sourceCode.decode()
PEG = sourceCodeString.split('PEG</td><td width="8%" class="snapshot-td2" align="left"><b>')[1].split('</b></td>')[0]
for color in color_list:
if color in PEG:
PEG = PEG.split(color)[1].split(color_close)[0]
PEG = float(PEG)
except Exception as e:
if Exception:
pass
return
for stock in sp500short:
pbr = finvizPBStats(stock)
PEG = finvizPEGStats(stock)
data.append([pbr, PEG])
df = pd.DataFrame(index=sp500short, columns=['pbr', 'PEG'])
print(df)
【问题讨论】:
-
什么样的数据结构保存你的原始数据?如果它兼容,它可以像
df(input_data)一样简单。 -
你没有返回任何东西。这样做:
return pbr, PEG。此外,根据您的函数的结构,除非您初始化 pbr 和 PEG,否则这可能会引发错误。例如,您可以尝试在 try / except 语句之前的函数中添加pbr, PEG = 0, 0。