pandas-datareader

2023-12-20 05:18
文章标签 pandas datareader

本文主要是介绍pandas-datareader,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

pandas-datareader介绍

Pandas库提供了专门从财经网站获取金融数据的API接口,可作为量化交易股票数据获取的另一种途径,该接口在urllib3库基础上实现了以客户端身份访问网站的股票数据。需要注意的是目前模块已经迁徙到pandas-datareader包中,因此导入模块时需要由import pandas.io.data as web更改为import pandas_datareader.data as web。

相关参考网站

官网
github
0.6.0版本操作文档

DataReader方法介绍

查看Pandas的操作文档可以发现,第一个参数为股票代码,苹果公司的代码为"AAPL",国内股市采用的输入方式“股票代码”+“对应股市”,上证股票在股票代码后面加上“.SS”,深圳股票在股票代码后面加上“.SZ”。DataReader可从多个金融网站获取到股票数据,如“Yahoo! Finance” 、“Google Finance”等,这里以Yahoo为例。第三、四个参数为股票数据的起始时间断。返回的数据格式为DataFrame。

start = datetime.datetime(2017,1,1)#获取数据的时间段-起始时间
end = datetime.date.today()#获取数据的时间段-结束时间
stock = web.DataReader("600797.SS", "yahoo", start, end)#获取浙大网新2017年1月1日至今的股票数据

数据分析

1、打印DataFrame数据前5行和尾部倒数5行(浙大网新因重大事件停牌至1月6日开始复牌)

print stock.head(5)
print stock.tail(5)

2、打印DataFrame数据索引和列名,索引为时间序列,列信息为开盘价、最高价、最低价、收盘价、复权收盘价、成交量

print stock.index
print stock.columns

3、打印DataFrame数据形状,index长度为248,columns数为6,即248个交易日,6项股票数据

print stock.shape

4、打印DataFrame数据查看数据是否有缺失,以及每列数据的类型

print stock.info()

5、打印DataFrame数据每组的统计情况,如最小值、最大值、均值、标准差等

print stock.describe()

6、DataFrame数据中增加涨/跌幅列,涨/跌=(当日Close-上一日Close)/上一日Close*100%

(1)添加一列change,存储当日股票价格与前一日收盘价格相比的涨跌数值,即当日Close价格与上一日Close的差值,1月3日这天无上一日数据,因此出现缺失

change = stock.Close.diff()
stock['Change'] = change
print stock.head(5)

(2)对缺失的数据用涨跌值的均值就地替代NaN。

change.fillna(change.mean(),inplace=True)

(3)计算涨跌幅度有两种方法,pct_change()算法的思想即是第二项开始向前做减法后再除以第一项,计算得到涨跌幅序列。

stock['pct_change'] = (stock['Change'] /stock['Close'].shift(1))#
stock['pct_change1'] = stock.Close.pct_change()

7、DataFrame数据中增加跳空缺口数值序列,这里定义的缺口为上涨趋势和下跌趋势中的突破缺口,上涨趋势中今天的最低价高于昨天收盘价为向上跳空,下跌趋势中昨天收盘价高于今天最高价为向下跳空。遍历每个交易日后将符合跳空缺口条件的交易日增加缺口数值。

jump_pd = pd.DataFrame()
for kl_index in np.arange(1, stock.shape[0]):
today = stock.ix[kl_index]
yesday = stock.ix[kl_index-1]
today['preCloae'] = yesday.Close   if today['pct_change'] > 0 and (today.Low-today['preCloae']) > 0:today['jump_power'] = (today.Low-today['preCloae'])elif  today['pct_change'] < 0 and (today.High-today['preCloae']) < 0:today['jump_power'] = (today.High-today['preCloae'])jump_pd = jump_pd.append(today)        stock['jump_power'] = jump_pd['jump_power']print stock.loc["2017-04-26":"2017-06-15"]#默认打印全部列

8、DataFrame数据保留两位小数显示

format = lambda x: '%.2f' % x
stock = stock.applymap(format)
print stock.loc["2017-04-26":"2017-06-15"]#默认打印全部列

股价数据的可视化

Matplotlib是使用Python进行绘图里非常方便的库。这次 plot使用的数据是 Adj Close栏的数据。这是所说的已调整收盘价。

如下仅仅需要两行写就可以简单的将股价作为时间序列数据画出来。

alibaba['Adj Close'].plot(legend=True, figsize=(10,4))
plt.show()

完整示例

import pandas as pd
from pandas import Series, DataFrame
import numpy as np

import matplotlib.pyplot as plt

from pandas_datareader import data, wb
from datetime import datetime

end = datetime.now()
start = datetime(end.year - 1, end.month, end.day)
alibaba = data.DataReader('BABA', 'yahoo', start, end)

alibaba['Adj Close'].plot(legend=True, figsize=(10,4))
plt.show()

更多图表操作可参考:
实例操作:Python提取雅虎财经数据,并做数据分析和可视化

以csv格式存放

import numpy as np
import pandas as pd
import pandas_datareader.data as web
import datetime

df_csvsave = web.DataReader("600018.SS","yahoo",datetime.datetime(2019,1,1),datetime.date.today())
print (df_csvsave)
df_csvsave.to_csv(r'C:\Users\15461\Desktop\table.csv',columns=df_csvsave.columns,index=True)

可能遇到的问题

在《利用Python进行数据分析》一书中,学习到pandas这一章节,利用书中的方法去获取雅虎数据会出现以下问题:

问题一The pandas.io.data module is moved to a separate package (pandas-datareader)

import pandas.io.data as web
Traceback (most recent call last):File "<pyshell#0>", line 1, in <module>import pandas.io.data as webFile "C:\Program Files (x86)\Python36-32\lib\site-packages\pandas\io\data.py", line 2, in <module>"The pandas.io.data module is moved to a separate package "
ImportError: The pandas.io.data module is moved to a separate package (pandas-datareader).After installing the pandas-datareader package (https://github.com/pydata/pandas-datareader), 
you can change the import ``from pandas.io import data, wb`` to ``from pandas_datareader import data, wb``.

根据提示,我们很快可以知道,‘pandas.io’这个模块已经变成了‘pandas_datareader’了,cmd命令行中执行以下语句即可解决这个问题:

pip install pandas_datareader

用以下语句可以调用模块

import pandas_datareader.data as web

问题二Yahoo Actions has been immediately deprecated due to large breaks

web.get_data_yahoo('AAPL','1/1/2000','1/1/2010')
Traceback (most recent call last):File "<pyshell#2>", line 1, in <module>web.get_data_yahoo('AAPL','1/1/2000','1/1/2010')File "C:\Program Files (x86)\Python36-32\lib\site-packages\pandas_datareader\data.py", line 63, in get_data_yahooraise ImmediateDeprecationError(DEP_ERROR_MSG.format('Yahoo Actions'))
pandas_datareader.exceptions.ImmediateDeprecationError: 
Yahoo Actions has been immediately deprecated due to large breaks in the API without the

introduction of a stable replacement. Pull Requests to re-enable these data connectors are welcome.

See https://github.com/pydata/pandas-datareader/issues

原因 yahoo的数据接口有改动导致不可用。

在网上搜了好久才找到这一方法,这里我们需要引入另外一个模块‘fix_yahoo_finance’,同样使用pip方法进行安装

pip install fix_yahoo_finance

调用方式如下:

import pandas_datareader.data as web
import datetime
import fix_yahoo_finance as yf
yf.pdr_override()

start=datetime.datetime(2006, 10, 1)
end=datetime.datetime(2012, 1, 1)
web.get_data_yahoo('AAPL',start,end)

这样子就可以下载雅虎数据了。

问题三-在键入1/1/2000和1/1/2010后报错

这里提示是时间的格式错误,应改为"%Y-%m-%d"

解决办法:for循环这里这样写

 for ticker in ['AAPL','IBM','MSFT','GOOG']:...:     all_data[ticker]=web.get_data_yahoo(ticker,'2000-1-1','2010-1-1')

这篇关于pandas-datareader的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/514876

相关文章

pandas数据过滤

Pandas 数据过滤方法 Pandas 提供了多种方法来过滤数据,可以根据不同的条件进行筛选。以下是一些常见的 Pandas 数据过滤方法,结合实例进行讲解,希望能帮你快速理解。 1. 基于条件筛选行 可以使用布尔索引来根据条件过滤行。 import pandas as pd# 创建示例数据data = {'Name': ['Alice', 'Bob', 'Charlie', 'Dav

【Python从入门到进阶】64、Pandas如何实现数据的Concat合并

接上篇《63.Pandas如何实现数据的Merge》 上一篇我们学习了Pandas如何实现数据的Merge,本篇我们来继续学习Pandas如何实现数据的Concat合并。 一、引言 在数据处理过程中,经常需要将多个数据集合并为一个统一的数据集,以便进行进一步的分析或建模。这种需求在多种场景下都非常常见,比如合并不同来源的数据集以获取更全面的信息、将时间序列数据按时间顺序拼接起来以观察长期趋势等

win7下安装Canopy(EPD) 及 Pandas进行python数据分析

先安装好canopy,具体安装版本看自己需要那种,我本来是打算安装win764位的,却发现下载总是出现错误,无奈只能下载了32位的! https://store.enthought.com/downloads/#default 安装好之后,参考如下连接,进行检验: 之后再根据下面提供的连接进行操作,一般是没问题的! http://jingyan.baidu.com/article/5d6

11Python的Pandas:可视化

Pandas本身并没有直接的可视化功能,但它与其他Python库(如Matplotlib和Seaborn)无缝集成,允许你快速创建各种图表和可视化。这里是一些使用Pandas数据进行可视化的常见方法: 1. 使用Matplotlib Pandas中的plot()方法实际上是基于Matplotlib的,你可以使用它来绘制各种基本图表,例如折线图、柱状图、散点图等。 import pandas

jupyter在加载pkl文件时报错ModuleNotFoundError: No module named 'pandas.core.internals.managers'; '的解决方法

笔者当看到这个错误的时候一脸懵逼,在pycharm上正常运行的code 放在jupyter就不成了,于是就研究一翻。 一开始以为自己的pkl文件有问题,研究重点放在这里,最后发现不是。 然后取搜索pycharm和jupyter下的python的\Lib\site-packages\pandas\core\internals有什么不同 发现jupyter下没有pandas\core\intern

数据处理与数据填充在Pandas中的应用

在数据分析和机器学习项目中,数据处理是至关重要的一步。Pandas作为Python中用于数据分析和操作的一个强大库,提供了丰富的功能来处理和清洗数据。本文将深入探讨Pandas在数据处理,特别是数据填充方面的应用。 在实际的数据集中,缺失值(Missing Values)或异常值(Outliers)是常见的问题。这些不完整或错误的数据如果不加以处理,会严重影响数据分析的准确性和机器学习模型的性能

【python pandas】 Dataframe的数据print输出 显示为...省略号

pandas.set_option() 可以设置pandas相关的参数,从而改变默认参数。 打印pandas数据事,默认是输出100行,多的话会输出….省略号。 那么可以添加: pandas.set_option('display.max_rows',None) 这样就可以显示全部数据 同样,某一列比如url太长 显示省略号 也可以设置。 pd.set_option('display.

Python|玩转 Excel:Pandas、openpyxl、pywin32

文章目录 引言Pandas读取 Excel写入 Excel数据操作样式设置数据验证公式支持 openpyxl读取 Excel写入 Excel数据操作样式设置数据验证公式支持图表创建 xlrd / xlwt读取 Excel(xlrd)写入 Excel(xlwt) pyxlsb读取 Excel(pyxlsb) xlsxwriter写入 Excel样式设置公式支持图表创建 pywin32 (Win

10Python的Pandas:样式Style

Pandas 提供了多种样式选项,可以让你对数据框的显示进行格式化。这些样式可以帮助突出显示数据中的某些元素、设置颜色、格式化数字等。以下是一些常用的 Pandas 样式示例: 1. 基本样式设置 要为整个数据框应用样式,可以使用 style 属性。例如,你可以为所有的数值设置显示格式: import pandas as pd# 创建示例数据框df = pd.DataFrame({'A':

Python文件读写readline()、readlines()、CSV库、pandas库

1.readline() .readline()每次只读取一行,通常比 .readlines()慢得多;仅当没有足够内存可以一次读取整个文件时,才应该使用.readline()。  f = open('poem.txt','r') result = list() for line in open('poem.txt'): line = f.readline() print line