【发布时间】:2020-04-28 09:04:00
【问题描述】:
我是 Python 新手,但对 R 很了解。我正在尝试从雅虎网站抓取股票价格数据。我成功检索了价格数据并能够创建数据框。但是,雅虎包括何时支付股息。目前,我想忽略股息,但我无法过滤数据框以在支付股息时删除。另外,我想更改Date 列的格式,例如,从Mar 14, 2000 更改为%Y-%m-%d。
来自网络爬虫:
Date Open Close
Dec 23, 2019 0.611 Dividend None
Dec 01, 2019 88.38 88.90
首先,我尝试对'None' 进行过滤,但这是一个空数据框:df.loc[df.Close=='None']
其次,我尝试用类似于 R 中的 gsub 的函数替换 Open 列的 Dividend 方面,但可能做得不正确。我的想法是我可以删除该单元格中的值并替换为新值toRemove,然后过滤这个新值:
re.sub('Dividend','Remove',df.Open,flags=re.I)
在 R 中,我知道您可以使用 str(df) 来获取数据框的结构,而 Python 使用 df.dtypes,但这为我返回了 object,我不知道该怎么做才能修复日期问题。
用于 Webscrape 的代码:
import pandas as pd
import bs4 as bs
import urllib.request
url = 'https://finance.yahoo.com/quote/VT/history?period1=1547078400&period2=1607558400&interval=1mo&filter=history&frequency=1mo'
source = urllib.request.urlopen(url).read()
soup =bs.BeautifulSoup(source,'lxml')
tr = soup.find_all('tr')
data = []
# formats price data
for table in tr:
td = table.find_all('td')
row = [i.text for i in td]
data.append(row)
# labels columns
columns = ['Date', 'Open', 'High', 'Low', 'Close', 'AdjClose', 'Volume']
data = data[1:-2]
df = pd.DataFrame(data)
df.columns = columns
【问题讨论】:
-
只获取 元素不是更好吗?
-
你这是什么意思?
标签: python pandas dataframe web-scraping