python积累--pandas---使用pandas-datareader获取股票信息进行分析

article/2025/9/30 23:44:10

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 npimport matplotlib.pyplot as pltfrom pandas_datareader import data, wb
from datetime import datetimeend = 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 datetimedf_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 theintroduction 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')

http://chatgpt.dhexx.cn/article/TZlQ2ioF.shtml

相关文章

C#连接数据库之Connection、Command、DataReader用法总结

目录 Connection连接字符串 创建并使用连接对象 数据连接的两个方法是Open()和Colse()。 Command对象与DataReader对象 构造函数&#xff1a; 常用属性: 常用方法&#xff1a; 大多数应用程序都需要和数据库交互。同其他.NET开发语言一样&#xff0c;在C#语言中对数据库…

DataAdapter与DataReader(区别与运用)

DataAdapter是数据访问适配器&#xff0c;适配了数据库和应用程序之间的隔阂。将数据一次加载到内存后便断开与数据库的连接。不适用于大量数据读取&#xff0c;在读取大量数据的过程中&#xff0c;要是出现数据量超越内存容量便会卡死。DataAdapter是DataReader封装而来的。 D…

DataReader的详细用法

1 // DataReader的详细用法 2 cmd.CommandText " GetInfo " ; 3 cmd.CommandType CommandType.StoredProcedure; 4 SqlParameter param cmd.Parameters.Add( " Fid " , 16 ); 5 param cmd.Parameters.Add( " Fname " ,SqlDbType…

read data

将82078置于读数据模式需要一组九&#xff08;9&#xff09;个字节。 发出READ DATA命令后&#xff0c;82078加载磁头&#xff08;如果它处于卸载状态&#xff09;&#xff0c;等待指定的磁头稳定时间&#xff08;在SPECIFY命令中定义&#xff09;&#xff0c;并开始读取ID地址…

pandas-datareader

pandas-datareader介绍 Pandas库提供了专门从财经网站获取金融数据的API接口&#xff0c;可作为量化交易股票数据获取的另一种途径&#xff0c;该接口在urllib3库基础上实现了以客户端身份访问网站的股票数据。需要注意的是目前模块已经迁徙到pandas-datareader包中&#xff0…

DataReader

DataReader类概述 DataReader 类在 System.Data.SqlClient 命名空间中&#xff0c;对应的类是 SqlDataReader&#xff0c;主要用于读取表中的查询结果&#xff0c;并且是以只读方式读取的&#xff08;即不能修改 DataReader 中存放的数据&#xff09;。 正是由于 DataReader 类…

C#之读取数据:DataReader对象

上一篇涉及到Command对象的ExecuteReader()方法返回一个DataReader对象&#xff0c;那么我们就来详细的介绍这个DataReade对象。 下面的例子使用的数据表依然与上篇的相同为CustomerManagement数据库中的manager数据表&#xff1a; DataReader对象概述 DataReader对象提供了顺序…

C# DataReader读取查询

C# DataReader&#xff1a;读取查询结果 在C# 中 DataReader 类的作用是读取查询结果&#xff0c;与在《C# Command》一节中介绍的 Command 类 中的 ExecuteReader 方法一起使用。 下面来介绍一下 DataReader 类中常用的属性和方法&#xff0c;以及如何使用该类查询表中的数…

DataReader用法

转载自&#xff1a;http://www.studyofnet.com/news/693.html 本文导读&#xff1a;DataReader对象只允许以只读、顺向的方式查看其中所存储的数据&#xff0c;提供一个非常有效率的数据查看模式&#xff0c;Datareader对象不能关使用new关键字创建。但可以使用ExecuteReader&a…

C语言初阶-C语言中static的用法

目录 前言 1.static的定义 2.static修饰局部变量 2.static修饰全局变量 3.static修饰函数 总结&#xff1a; 前言 哈喽&#xff0c;大家好&#xff0c;我是大鹏&#xff0c;目前是一名大二的学生&#xff0c;今天给大家带来的是static的用法&#xff0c;希望大家给个关注…

C语言关键字之static

static是C语言中得一个关键字。 它的使用有三种情况&#xff1a;修饰局部变量、全局变量、函数。 修饰局部变量&#xff1a;改变存储属性 普通的局部变量是存放在栈中的&#xff0c;而被static修饰的变量是存放在数据段中的。 放在数据段中的具体位置具体分析&#xff1a;已…

c语言 static运用,灵活改变生命周期,让你写代码如鱼得水

在C语言中static是非常重要的一个关键字 static意为静态的&#xff0c;它的用法基本分为三种 1. 修饰局部变量&#xff08;改变局部变量的生命周期&#xff09; 2. 修饰全局变量&#xff08;使全局变量仅作用于当前源文件&#xff09; 3. 修饰函数&#xff08;使函数仅作用…

c语言staticint的作用,C语言 static 声明静态变量?大佬原来用它干这事!

原标题&#xff1a;C语言 static 声明静态变量&#xff1f;大佬原来用它干这事&#xff01; C语言可变参数只会用算啥本事&#xff1f;看我来抽丝剥茧干翻它&#xff01; 高手在写代码的时候&#xff0c;会特别注重的一点就是&#xff0c;对外的方法对外&#xff0c;不对外的方…

C语言static和extern关键字

1.static static修饰的变量&#xff0c;自始至终只有一块空间&#xff0c;当前文件才能使用&#xff0c;生命周期是从定义开始直到程序结束&#xff1b;全局变量的定义是在.c文件中&#xff0c;但是声明全局变量是在.h中&#xff1b;static&#xff1a;静态型&#xff0c;用它定…

C语言static关键字修饰变量及函数时的用法和原理

目录 一.static关键字修饰局部变量 二.static关键字修饰全局变量 三.static关键字修饰函数 一.static关键字修饰局部变量 在内存中&#xff0c;往往将其分为三个区块&#xff0c;栈区&#xff0c;堆区&#xff0c;静态区。C语言中定义的局部变量包括函数参数都存储在栈区&am…

C语言 static的使用

你知道C语言中 static 有几种用法&#xff1f; 目录 1. static 可以修饰局部变量 2. static 可以修饰全局变量 3. static 可以修饰函数 1.static 可以修饰局部变量 首先让我看看这段代码 #include<stdio.h> void test() {int a 1;a a 1;printf("%d", a);…

C语言 Static关键字的作用详解

前言&#xff1a; static 是用来修饰函数和变量的&#xff0c;可以修饰局部变量&#xff0c;全局变量以及函数 一、修饰局部变量 &#xff08;称为静态局部变量&#xff09; 来看俩段代码&#xff1a; 对于第一段代码来说&#xff0c;它循环5次&#xff0c;每次调用一下fun(…

[深度解剖C语言] --关键字 static

static ---最名不副实的关键字 目录 1.static修饰全局变量 2.static修饰函数 3.static修饰局部变量 static的作用&#xff1a; 1.static修饰全局变量 我们创建两个源文件&#xff0c;一个test.c&#xff0c;一个main.c 现在我们在test.c文件下定义一个全局变量 int g_va…

C语言中static的用法(修饰局部变量,修饰全局变量,修饰函数)

static 关键字有三种用法 static 修饰局部变量 - 静态局部变量static 修饰全局变量 - 静态全局变量static 修饰函数 - 静态函数 static 关键字的三种用法 1. static 修饰局部变量 - 静态局部变量2. static 修饰全局变量 - 静态全局变量3. static 修饰函数 - 静态函数 1. stati…

带你熟知关键字static用法——C语言(举例及通俗易懂)

引入 首先我们看两个例子&#xff1a; 例1 #include<stdio.h> void test() {int i 0;i;printf("%d", i); } int main() {int a 0;while (a < 10){test();a;}return 0; } 例2 #include<stdio.h> void test() {static int i 0;i;printf("%d…