導航:首頁 > 數據行情 > pandas操作股票數據

pandas操作股票數據

發布時間:2022-10-06 04:06:13

❶ 如何編程從免費股票軟體中提取實時數據

自己寫程序的話,一種方法是從已提供的信息源,例如webservice獲取數據。還有種辦法就是去連接提供即時信息的網頁硬解析。

代碼舉例如下:

Created on Thu Jul 23 09:17:27 2015
@author: jet
"""
DAY_PRICE_COLS = ['date', 'open', 'high', 'close', 'low', 'volume',
'chg', '%chg', 'ma5', 'ma10', 'ma20',
'vma5', 'vma10', 'vma20', 'turnover']
DAY_PRICE_URL = '%sapi.finance.%s/%s/?code=%s&type=last'
INDEX_KEY = ['SH', 'SZ', 'HS300', 'SZ50', 'GEB', 'SMEB']
INDEX_LIST = {'SH': 'sh000001', 'SZ': 'sz399001', 'HS300': 'sz399300',
'SZ50': 'sh000016', 'GEB': 'sz399006', 'SMEB': 'sz399005'}
INDEX_DAY_PRICE_COLS= ['date', 'open', 'high', 'close', 'low', 'volume',
'chg', '%chg', 'ma5', 'ma10', 'ma20',
'vma5', 'vma10', 'vma20']
K_TYPE_KEY = ['D', 'W', 'M']
K_TYPE_MIN_KEY = ['5', '15', '30', '60']
K_TYPE = {'D': 'akdaily', 'W': 'akweekly', 'M': 'akmonthly'}
MIN_PRICE_URL = '%sapi.finance.%s/akmin?scode=%s&type=%s'
PAGE_TYPE = {'http': 'http://', 'ftp': 'ftp://'}
PAGE_DOMAIN = {'sina': 'sina.com.cn', 'ifeng': 'ifeng.com'}
URL_ERROR_MSG = '獲取失敗,請檢查網路狀態,或者API埠URL已經不匹配!'

get_hist_data.py
# -*- coding: utf-8 -*-
"""
Created on Thu Jul 23 09:15:40 2015
@author: jet
"""
import const as ct
import pandas as pd
import json
from urllib2 import urlopen,Request

def get_hist_data(code = None, start = None, end = None, ktype = 'D'):
"""
功能:
獲取個股歷史交易數據
--------
輸入:
--------
code:string
股票代碼 比如:601989
start:string
開始日期 格式:YYYY-MM-DD 為空時取到API所提供的最早日期數據
end:string
結束日期 格式:YYYY-MM-DD 為空時取到最近一個交易日數據
ktype:string(default=D, 函數內部自動統一為大寫)
數據類型 D=日K線,W=周K線,M=月K線,5=5分鍾,15=15分鍾
30=30分鍾,60=60分鍾
輸出:
--------
DataFrame
date 日期
open 開盤價
high 最高價
close 收盤價
low 最低價
chg 漲跌額
p_chg 漲跌幅
ma5 5日均價
ma10 10日均價
ma20 20日均價
vma5 5日均量
vma10 10日均量
vma20 20日均量
turnover換手率(指數無此項)
"""
code = code_to_APIcode(code.upper())
ktype = ktype.upper()

url = ''
url = get_url(ktype, code)
print(url)

js = json.loads(ping_API(url))
cols = []

if len(js['record'][0]) == 14:
cols = ct.INDEX_DAY_PRICE_COLS
else:
cols = ct.DAY_PRICE_COLS
df = pd.DataFrame(js['record'], columns=cols)

if ktype in ct.K_TYPE_KEY:
df = df.applymap(lambda x:x.replace(u',', u''))
for col in cols[1:]:
df[col]=df[col].astype(float)
if start is not None:
df = df [df.date >= start]
if end is not None:
df = df[df.date <= end]
df = df.set_index('date')
return df

def code_to_APIcode(code):
"""
功能:
驗證輸入的股票代碼是否正確,若正確則返回API對應使用的股票代碼
"""
print(code)
if code in ct.INDEX_KEY:
return ct.INDEX_LIST[code]
else:
if len(code) != 6:
raise IOError('code input error!')
else:
return 'sh%s'%code if code[:1] in ['5', '6'] else 'sz%s'%code

def get_url(ktype, code):
"""
功能:
驗證輸入的K線類型是否正確,若正確則返回url
"""
if ktype in ct.K_TYPE_KEY:
url = ct.DAY_PRICE_URL % (ct.PAGE_TYPE['http'], ct.PAGE_DOMAIN['ifeng'],
ct.K_TYPE[ktype], code)
return url
elif ktype in ct.K_TYPE_MIN_KEY:
url = ct.MIN_PRICE_URL % (ct.PAGE_TYPE['http'], ct.PAGE_DOMAIN['ifeng'],
code, ktype)
return url
else:
raise IOError('ktype input error!')

def ping_API(url):
"""
功能:
向API發送數據請求,若鏈接正常返回數據
"""
text = ''
try:
req = Request(url)
text = urlopen(req,timeout=10).read()
if len(text) < 15:
raise IOError('no data!')
except Exception as e:
print(e)
else:
return text

#測試入口
print(get_hist_data('601989','2015-07-11','2015-07-22'))

❷ 怎麼用python panda 算股票市場收益率

1.收集數據,開盤價,收盤價,交易量
2.用pandas處理數據,處理缺失值
3.用股票收益率的公式帶入
說白了,pandas只是個好用的工具,方法都是一樣的,只是效率問題
有多少人工,就有多少智能

❸ 如何用python代碼判斷一段范圍內股票最高點

Copyright © 1999-2020, CSDN.NET, All Rights Reserved




登錄

python+聚寬 統計A股市場個股在某時間段的最高價、最低價及其時間 原創
2019-10-12 09:20:50

開拖拉機的大寶

碼齡4年

關注
使用工具pycharm + 聚寬數據源,統計A股市場個股在某時間段的最高價、最低價及其時間,並列印excel表格輸出

from jqdatasdk import *
import pandas as pd
import logging
import sys
logger = logging.getLogger("logger")
logger.setLevel(logging.INFO)

# 聚寬數據賬戶名和密碼設置
auth('username','password')

#獲取A股列表,包括代號,名稱,上市退市時間等。
security = get_all_securities(types=[], date=None)
pd2 = get_all_securities(['stock'])


# 獲取股票代號
stocks = list(get_all_securities(['stock']).index)

# 獲取股票名稱
stocknames = pd2['display_name']

start_date = 񟭏-01-01'
end_date = 񟭒-12-31'
def get_stocks_high_low(start_date,end_date):
# 新建表,表頭列
# 為:"idx","stockcode","stockname","maxvalue","maxtime","lowvalue","lowtime"
result = pd.DataFrame(columns=["idx", "stockcode", "stockname", "maxvalue", "maxtime", "lowvalue", "lowtime"])
for i in range(0,stocks.__len__()-1):
pd01 = get_price(stocks[i], start_date, end_date, frequency='daily',
fields=None, skip_paused=False,fq='pre', count=None)
result=result.append(pd.DataFrame({'idx':[i],'stockcode':[stocks[i]],'stockname':
[stocknames[i]],'maxvalue':[pd01['high'].max()],'maxtime':
[pd01['high'].idxmax()],'lowvalue': [pd01['low'].min()], 'lowtime':
[pd01['low'].idxmin()]}),ignore_index=True)

result.to_csv("stock_max_min.csv",encoding = 'utf-8', index = True)
logger.warning("執行完畢!

❹ 如何編程從免費股票軟體中提取實時數據

自己寫程序的話,一種方法是從已提供的信息源,例如webservice獲取數據。還有種辦法就是去連接提供即時信息的網頁硬解析。

代碼舉例如下:

Created on Thu Jul 23 09:17:27 2015
@author: jet
"""
DAY_PRICE_COLS = ['date', 'open', 'high', 'close', 'low', 'volume',
'chg', '%chg', 'ma5', 'ma10', 'ma20',
'vma5', 'vma10', 'vma20', 'turnover']
DAY_PRICE_URL = '%sapi.finance.%s/%s/?code=%s&type=last'
INDEX_KEY = ['SH', 'SZ', 'HS300', 'SZ50', 'GEB', 'SMEB']
INDEX_LIST = {'SH': 'sh000001', 'SZ': 'sz399001', 'HS300': 'sz399300',
'SZ50': 'sh000016', 'GEB': 'sz399006', 'SMEB': 'sz399005'}
INDEX_DAY_PRICE_COLS= ['date', 'open', 'high', 'close', 'low', 'volume',
'chg', '%chg', 'ma5', 'ma10', 'ma20',
'vma5', 'vma10', 'vma20']
K_TYPE_KEY = ['D', 'W', 'M']
K_TYPE_MIN_KEY = ['5', '15', '30', '60']
K_TYPE = {'D': 'akdaily', 'W': 'akweekly', 'M': 'akmonthly'}
MIN_PRICE_URL = '%sapi.finance.%s/akmin?scode=%s&type=%s'
PAGE_TYPE = {'http': 'http://', 'ftp': 'ftp://'}
PAGE_DOMAIN = {'sina': 'sina.com.cn', 'ifeng': 'ifeng.com'}
URL_ERROR_MSG = '獲取失敗,請檢查網路狀態,或者API埠URL已經不匹配!'

get_hist_data.py
# -*- coding: utf-8 -*-
"""
Created on Thu Jul 23 09:15:40 2015
@author: jet
"""
import const as ct
import pandas as pd
import json
from urllib2 import urlopen,Request

def get_hist_data(code = None, start = None, end = None, ktype = 'D'):
"""
功能:
獲取個股歷史交易數據
--------
輸入:
--------
code:string
股票代碼 比如:601989
start:string
開始日期 格式:YYYY-MM-DD 為空時取到API所提供的最早日期數據
end:string
結束日期 格式:YYYY-MM-DD 為空時取到最近一個交易日數據
ktype:string(default=D, 函數內部自動統一為大寫)
數據類型 D=日K線,W=周K線,M=月K線,5=5分鍾,15=15分鍾
30=30分鍾,60=60分鍾
輸出:
--------
DataFrame
date 日期
open 開盤價
high 最高價
close 收盤價
low 最低價
chg 漲跌額
p_chg 漲跌幅
ma5 5日均價
ma10 10日均價
ma20 20日均價
vma5 5日均量
vma10 10日均量
vma20 20日均量
turnover換手率(指數無此項)
"""
code = code_to_APIcode(code.upper())
ktype = ktype.upper()

url = ''
url = get_url(ktype, code)
print(url)

js = json.loads(ping_API(url))
cols = []

if len(js['record'][0]) == 14:
cols = ct.INDEX_DAY_PRICE_COLS
else:
cols = ct.DAY_PRICE_COLS
df = pd.DataFrame(js['record'], columns=cols)

if ktype in ct.K_TYPE_KEY:
df = df.applymap(lambda x:x.replace(u',', u''))
for col in cols[1:]:
df[col]=df[col].astype(float)
if start is not None:
df = df [df.date >= start]
if end is not None:
df = df[df.date <= end]
df = df.set_index('date')
return df

def code_to_APIcode(code):
"""
功能:
驗證輸入的股票代碼是否正確,若正確則返回API對應使用的股票代碼
"""
print(code)
if code in ct.INDEX_KEY:
return ct.INDEX_LIST[code]
else:
if len(code) != 6:
raise IOError('code input error!')
else:
return 'sh%s'%code if code[:1] in ['5', '6'] else 'sz%s'%code

def get_url(ktype, code):
"""
功能:
驗證輸入的K線類型是否正確,若正確則返回url
"""
if ktype in ct.K_TYPE_KEY:
url = ct.DAY_PRICE_URL % (ct.PAGE_TYPE['http'], ct.PAGE_DOMAIN['ifeng'],
ct.K_TYPE[ktype], code)
return url
elif ktype in ct.K_TYPE_MIN_KEY:
url = ct.MIN_PRICE_URL % (ct.PAGE_TYPE['http'], ct.PAGE_DOMAIN['ifeng'],
code, ktype)
return url
else:
raise IOError('ktype input error!')

def ping_API(url):
"""
功能:
向API發送數據請求,若鏈接正常返回數據
"""
text = ''
try:
req = Request(url)
text = urlopen(req,timeout=10).read()
if len(text) < 15:
raise IOError('no data!')
except Exception as e:
print(e)
else:
return text

#測試入口
print(get_hist_data('601989','2015-07-11','2015-07-22'))

❺ 怎麼利用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)

......

❻ 怎樣用python提取不同股票csv里特定時間段的數據

用pandas庫,
import pandas as pd

data = pd.read_csv('train.csv')
train_data = data.values[0:TRAIN_NUM,1:]
train_label = data.values[0:TRAIN_NUM,0]
study.163.com/course/courseMain.htm?courseId=1000035
機器學習正好講了這個手寫識別的例子!

❼ Pandas入門教程

大家好,我是皮皮。其實這個pandas教程,卷的很嚴重了,才哥,小P等人寫了很多的文章,這篇文章是粉絲【古月星辰】投稿,自己學習過程中整理的一些基礎資料,整理成文,這里發出來給大家一起學習。

本文主要詳細介紹了pandas的各種基礎操作,源文件為zlJob.csv,可以私我進行獲取,下圖是原始數據部分一覽。

pandas官網:

一般情況下我們得到的數據類型大多數csv或者excel文件,這里僅給出csv,

pandas可以創建兩種數據類型,series和DataFrame;

結果:

axis表示軸向,axis=1,表示縱向(刪除一列)

iloc是基於位置的索引,利用元素在各個軸上的索引序號進行選擇,序號超出范圍會產生IndexError,切片時允許序號超過范圍,用法包括:

1. 使用整數

2. 使用列表或數組

3. 切片對象

常見的方法就如上所示。

層次化索引應用於當目標數據的特徵值很多時,我們需要對多個特徵進行分析。

首先創建一個簡單的表格:

結果如下:

判斷缺失值

結果如下:

填充缺失值

刪除缺失值

結果如下:

當然還有其他情況:

這里就不做一一展示(原理都是一樣的)

groupby

根據職位名稱進行分組:

得到一個對象,我們可以去進行平均值,總和計算;

當然了可以根據多個特徵進行分組,也是沒有問題的;

concat():

官網參數解釋如下:

測試:

結果如下:

merge()

這里給出常用參數解釋:

測試:

結果如下:

相同的欄位是'key',所以指定on='key',進行合並。

輸出結果:

5.2 時間序列在pandas中的應用

輸出結果:

本文基於源文件zlJob.csv,進行了部分pandas操作,演示了pandas庫常見的數據處理操作,由於pandas功能復雜,具體詳細講解請參見官網

❽ PYthon遍歷語句求指導,如何通過python下載某時期所有股票日線信息然後存文件

你可以去官網看看怎麼去做,

❾ Pandas基本操作

一、查看數據

1.查看DataFrame前xx行或後xx行

a=DataFrame(data);

a.head(6)表示顯示前6行數據,若head()中不帶參數則會顯示全部數據。

a.tail(6)表示顯示後6行數據,若tail()中不帶參數則也會顯示全部數據。

2.查看DataFrame的index,columns以,dtypes及values

a.index ; a.columns ; a.values;a.dtypes 即可

3.describe()函數對於數據的快速統計匯總

a.describe()對每一列數據進行統計,包括計數,均值,std,各個分位數等。

4.對數據的轉置

a.T

5.對軸進行排序

a.sort_index(axis=1,ascending=False);

其中axis=1表示對 所有的columns 進行排序,下面的數也跟著發生移動。後面的ascending=False表示按降序排列,參數缺失時默認升序。

6.對DataFrame中的值排序

a.sort(columns='x')

即對a中的x這一列,從小到大進行排序。注意僅僅是x這一列,而上面的按軸進行排序時會對所有的columns進行操作。

二、選擇對象

1.選擇特定列和行的數據

a['x'] 那麼將會返回columns為x的列, 注意這種方式一次只能返回一個列。 a.x與a['x']意思一樣。

取行數據,通過切片[]來選擇

如:a[0:3] 則會返回前三行的數據。

2.通過標簽來選擇

a.loc['one']則會默認表示選取行為'one'的行;

a.loc[:,['a','b'] ] 表示選取所有的行以及columns為a,b的列;

a.loc[['one','two'],['a','b']] 表示選取'one'和'two'這兩行以及columns為a,b的列;

a.loc['one',''a]與a.loc[['one'],['a']]作用是一樣的,不過前者只顯示對應的值,而後者會顯示對應的行和列標簽。

3.通過位置來選擇

這與通過標簽選擇類似

a.iloc[1:2,1:2] 則會顯示第一行第一列的數據;(切片後面的值取不到)

a.iloc[1:2] 即後面表示列的值沒有時,默認選取 行位置為1的數據 ;

a.iloc[[0,2],[1,2]] 即可以自由選取行位置,和列位置對應的數據。

4.使用條件來選擇

使用 單獨的列 來選擇數據

a[a.c>0] 表示選擇c列中大於0的數據

使用where來選擇數據

a[a>0] 表直接選擇a中所有大於0的數據

使用isin()選出 特定列中包含特定值的行

a1=a.()

a1[a1['one'].isin(['2','3'])] 表顯示滿足條件:列one中的值包含'2','3'的所有行。

三、設置值(賦值)

賦值操作在上述選擇操作的基礎上直接賦值即可。

例a.loc[:,['a','c']]=9 即將a和c列的所有行中的值設置為9

a.iloc[:,[1,3]]=9 也表示將a和c列的所有行中的值設置為9

同時也依然可以用條件來直接賦值

a[a>0]=-a 表示將a中所有大於0的數轉化為負值

四、缺失值處理

在pandas中,使用np.nan來代替缺失值,這些值將默認不會包含在計算中。

1.reindex()方法

用來 對指定軸上的索引進行改變/增加/刪除操作 ,這將返回原始數據的一個拷貝。

a.reindex(index=list(a.index)+['five'],columns=list(b.columns)+['d'])

a.reindex(index=['one','five'],columns=list(b.columns)+['d'])

即用index=[]表示對index進行操作,columns表對列進行操作。

2.對缺失值進行填充

a.fillna(value=x)

表示用值為x的數來對缺失值進行填充

3.去掉包含缺失值的行

a.dropna(how='any')

表示去掉所有包含缺失值的行

五、合並

1.contact

contact(a1,axis=0/1,keys=['xx','xx','xx',...]),其中a1表示要進行進行連接的列表數據,axis=1時表橫著對數據進行連接。axis=0或不指定時,表將數據豎著進行連接。a1中要連接的數據有幾個則對應幾個keys, 設置keys是為了在數據連接以後區分每一個原始a1中的數據。

例:a1=[b['a'],b['c']]

result= pd.concat (a1,axis=1,keys=['1','2'])

2.Append 將一行或多行數據連接到一個DataFrame上

a.append(a[2:],ignore_index=True)

表示將a中的第三行以後的數據全部添加到a中,若不指定ignore_index參數,則會把添加的數據的index保留下來,若ignore_index=Ture則會 對所有的行重新自動建立索引。

3.merge類似於SQL中的join

設a1,a2為兩個dataframe,二者中存在相同的鍵值,兩個對象連接的方式有下面幾種:

(1)內連接,pd.merge(a1, a2, on='key')

(2)左連接,pd.merge(a1, a2, on='key', how='left')

(3)右連接,pd.merge(a1, a2, on='key', how='right')

(4)外連接, pd.merge(a1, a2, on='key', how='outer')

至於四者的具體差別,具體學習參考sql中相應的語法。

六、分組(groupby)

用pd.date_range函數生成連續指定天數的的日期

pd.date_range('20000101',periods=10)

❿ 如何選取過去每個月股票的市值 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)

閱讀全文

與pandas操作股票數據相關的資料

熱點內容
博創科技股票股 瀏覽:530
中國西電股票歷史分紅 瀏覽:828
蘇州胥口有沒有南京銀行股票 瀏覽:803
可長期持有的股票分紅高嗎 瀏覽:481
看股票大盤APP 瀏覽:366
目前最易投資的中長線股票 瀏覽:199
股票重組後股價變化 瀏覽:602
創業板的股票退市會提醒你么 瀏覽:356
股票重組復牌價格 瀏覽:241
阿爾法歐洲etf股票代碼 瀏覽:618
股票中國天然 瀏覽:818
股票和債券最近 瀏覽:122
多贏股票軟體 瀏覽:914
國信證券股票002736 瀏覽:140
中國海誠的股票代碼 瀏覽:966
有福科技股票代碼 瀏覽:717
上市公司被接管後股票會退市么 瀏覽:395
中國石油的股票為何那麼低 瀏覽:952
漢鍾精機股票走勢圖 瀏覽:194
中國消費股票龍頭股 瀏覽:901