⑴ 解決 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)