⑴ 解决 pandas_datareader 无法获取雅虎财经数据的问题
pandas_datareader 是重要的 pandas 相关包,原来是 pandas.io.data 方法,用于获取接口数据,比如雅虎财经上的数据或者美联储路易斯安娜分行的数据,但是在最近版本(比如 pandas 0.20)中 pandas.io.data 的方法独立出来称为一个新的包 pandas_datareader 。
雅虎财经和谷歌财经的接口变换频繁。如果用 pip install pandas_datareader ,已经无法得到雅虎财经。
pandas_datareader github Issuse #315 针对的就是雅虎财经接口无法访问的问题, gusutabopb 在 5月21日进行了成功修正,并提供了他修正后的 pandas_datareader 新版本。
该修正版本的安装方法是
安装以后测试获取 google 的股票数据成功。
参考:
Issues with the data reader fetching yahoo finance #315
Error with pulling data from Yahoo Finance
⑵ 如何获取股票的净利润,每股收益,主营营业收入
股票中除了K线中开高低收价格信息外,还有一些其他指标反应股票市场,比如净利润、每股收益、主营营业收入。
净利润是指企业当期利润总额减去所得税后的金额,即企业的税后利润。通俗点说就是真正赚到手的钱。
每股收益即每股盈利(EPS),又称每股税后利润、每股盈余,指税后利润与股本总数的比率。是普通股股东每持有一股所能享有的企业净利润或需承担的企业净亏损。每股收益通常被用来反映企业的经营成果,衡量普通股的获利水平及投资风险,是投资者等信息使用者据以评价企业盈利能力、预测企业成长潜力、进而做出相关经济决策的重要的财务指标之一。
主营营业收入指企业从事本行业生产经营活动所取得的营业收入。
如何使用Python查出某只股票的这些信息呢?答案是使用Python的baostock接口,示例代码如下:
import baostock as bsimport pandas as pd# 登陆系统lg = bs.login()# 显示登陆返回信息print('login respond error_code:'+lg.error_code)print('login respond error_msg:'+lg.error_msg)# 查询季频估值指标盈利能力profit_list = []rs_profit = bs.query_profit_data(code="sh.600000", year=2017, quarter=2)while (rs_profit.error_code == '0') & rs_profit.next():profit_list.append(rs_profit.get_row_data())result_profit = pd.DataFrame(profit_list, columns=rs_profit.fields)# 打印输出print(result_profit)# 结果集输出到csv文件result_profit.to_csv("D:\\profit_data.csv", encoding="gbk", index=False)# 登出系统bs.logout()
返回数据如下,可以看出,有很多有用参数,非常方便。
⑶ 怎么利用pandas做数据分析
pandas的初级功能
1、逻辑运算
data[data['column_1']=='french']
data[(data['column_1']=='french') & (data['year_born']==1990)]
data[(data['column_1']=='french')&(data['year_born']==1990)&(data['city']=='London')]
如果要根据逻辑操作对数据进行运算,在使用& (AND)、~ (NOT)和| (OR)等逻辑操作之前和之后添加“(”&“)”。
data[data['column_1'].isin(['french', 'english'])]
不要为同一列编写多个OR,最好是使用.isin()函数。
2、基本绘图
多亏了matplotlib包,这个特性才得以实现。就像我们在介绍中说的,它可以直接用在pandas身上。
如果你使用Jupyter,在绘图之前,不要忘记写这一行(在代码中只写一次)
3、更新数据
data.loc[8, 'column_1'] = 'english'
将' column_1 '的第8行值替换为' english '
data.loc[data['column_1']=='french', 'column_1'] = 'French'
在一行中更改多行值
pandas的中级功能
1、计算功能
data['column_1'].value_counts
2、对全行、全列或所有数据的操作
data['column_1'].map(len)
len()函数应用于“column_1”的每个元素
map()操作将一个函数应用于列的每个元素。
data['column_1'].map(len).map(lambda x : x/100).plot()
pandas的另一个特点是进行链式操作。它可以帮助你在一行代码中执行多个操作,从而更加简单和高效。
data.apply(sum)
.apply()将函数应用于列。
.applymap()将一个函数应用于表(DataFrame)中的所有单元格。
3、tqdm包
在处理大型数据集时,pandas可能需要一些时间来运行.map()、.apply()、.applymap()操作。tqdm是一个非常有用的包,它可以帮助预测这些操作何时完成。
from tqdm import tqdm_notebook
tqdm_notebook().pandas()
用pandas设置tqdm
data['column_1'].progress_map(lambda x : x.count('e'))
将.map()替换为.progress_map(),.apply()和.applymap()也是一样
图4 这是你在Jupyter上看到的的进度条
4、相关矩阵和散射矩阵
data.corr()
data.corr().applymap(lambda x : int(x*100)/100)
......
⑷ 报错TypeError: 'NoneType' object is not subscriptable寻求解决办法
该错误意味着您正在尝试使用方括号(例如 )访问对象的元素,但该对象支持且不支持此操作。TypeError: 'NoneType' object is not subscriptableobject[index]None
在这种伍逗特定情况下,看起来函数正在返回而不是预期的数据框。这可能是由于Tushare API或网络连接出现问题。ts.get_hs300s()None
要修复此错误,您可以尝试以下操作:
查看图共享API文档,以确保您正确使用该函数。get_hs300s()
检查您的网络连接并确保其稳定可靠。
在交互式 Python shell 中使用该函数以查看它是否返回预期的数据框。ts.get_hs300s()
如果函数仍返回 ,请尝试使用其他 API 或数据集来获取所需的股票代码。ts.get_hs300s()None
下面是如何修改代码以处理返回的情况的示例:ts.get_hs300s()None
在这个例子中,我们在尝试访问它的“code”列之前检查变量是否不是。如果数腔念卖据框是 ,我们通过高哗打印消息来处理这种情况。这可以防止发生错误。hs300NoneNoneTypeError: 'NoneType' object is not subscriptable
回答不易望请采纳
⑸ 如何选取过去每个月股票的市值 python
类似,可以修改一下
股票涨跌幅数据是量化投资学习的基本数据资料之一,下面以python代码编程为工具,获得所需要的历史数据。主要步骤有:
(1) #按照市值从小到大的顺序活得N支股票的代码;
(2) #分别对这一百只股票进行100支股票操作;
(3) #获取从2016.05.01到2016.11.17的涨跌幅数据;
(4) #选取记录大于40个的数据,去除次新股;
(5) #将文件名名为“股票代码.csv”。
具体代码如下:
# -*- coding: utf-8 -*-
"""
Created on Thu Nov 17 23:04:33 2016
获取股票的历史涨跌幅,并分别存为csv格式
@author: yehxqq151376026
"""
import numpy as np
import pandas as pd
#按照市值从小到大的顺序活得100支股票的代码
df = get_fundamentals(
query(fundamentals.eod_derivative_indicator.market_cap)
.order_by(fundamentals.eod_derivative_indicator.market_cap.asc())
.limit(100),'2016-11-17', '1y'
)
#分别对这一百只股票进行100支股票操作
#获取从2016.05.01到2016.11.17的涨跌幅数据
#选取记录大于40个的数据,去除次新股
#将文件名名为“股票代码.csv”
for stock in range(100):
priceChangeRate = get_price_change_rate(df['market_cap'].columns[stock], '20160501', '20161117')
if priceChangeRate is None:
openDays = 0
else:
openDays = len(priceChangeRate)
if openDays > 40:
tempPrice = priceChangeRate[39:(openDays - 1)]
for rate in range(len(tempPrice)):
tempPrice[rate] = "%.3f" %tempPrice[rate]
fileName = ''
fileName = fileName.join(df['market_cap'].columns[i].split('.')) + '.csv'
fileName
tempPrice.to_csv(fileName)