2020-05-12

1.导入模块初始操作

import pandas as pd

import numpy as np

import tushare as ts

pro=ts.pro_api('7fac027f24db4e9bddd02e3f998cd48f9f28551050860e2c402d87fc')

import matplotlib.pyplot as plt

plt.rcParams['font.sans-serif']=['simhei']#用于正常显示中文标签plt.rcParams['axes.unicode_minus']=False#用于正常显示负号

data=pro.daily(ts_code='600036.SH',start_date='20190607',end_date='20191011')#获取股票日收盘价数据

data=pd.DataFrame(data)#只有将数据转化为DataFrame格式,在操作数据时才可以出现pandas函数的自动提示

2.基本操作

data.columns#Index(['ts_code', 'trade_date', 'open', 'high', 'low', 'close', 'pre_close','change', 'pct_chg', 'vol', 'amount']

data.indexdata.shape#数据框的行列数

data.info()#统计数据的信息

data[['open', 'high', 'low', 'close']].apply(lambda x: x * 2) # 对所有数据进行乘2运算

data.dtypes#统计数据框中的数据类型

pd.set_option('display.max_columns', None)# 显示所有列

pd.set_option('display.max_rows', None)# 显示所有行

np.set_printoptions(suppress=True)#若想不以科学计数显示:

pd.cut(np.random.randint(1, 90, 200), 4)

pd.Categorical([1, 2, 3, 1, 2, 3])

pd.CategoricalIndex(np.random.choice(['a', 'b', 'c', 'd', 'e'], 100))

int = pd.Interval(2, 6)

3.修改行列标题

data.index=pd.date_range('20120201',periods=len(data['vol']),freq='D')#修改数据框的行标题

data.columns=['股票代码', '交易日期', '开盘价', '最高价', '最低价', '收盘价', '前日收盘价','收盘价变动', 'pct_chg', '交易量', '交易额']#

data.rename(columns={'open':'开盘价'},inplace=True)#修改列标题

4.添加行列数据

data['kk']=0#添加数值为0的'kk'列

data.ix['另一行',:]=0#添加数值为0的'另一行'行

5.选取数据

data['high']

data[4:9]

data[['open', 'high', 'low', 'close']]

data['ts_code'].str[:4]#选取股票代码前四个字符,只有字符串类型的数据才可以作此操作

data.head(8) # 选取数据前8行

data.tail(8) # 选取数据后8行

6.利用ix()函数选取数据

data.ix[3:5]#选取第4到5行数据

data.ix[3:8,4:6]#选取第4到8行数据,第3到6列数据

data.ix[5]#选取第6行数据

data.ix[:,5]#选取所有行,第6列

data.ix[:,'ts_code']#选取所有行,标题为'ts_code'的数据

data.ix[:,'ts_code':'high']#选取所有行,列标题从'ts_code'到'high'的数据

data.ix[[3,4]]#选取第4,5行的数据

data.ix[[2,6],[5,7]]#选取第3,7行,第6,8列的标题

data.ix[[2,5],'ts_code']#选取第3,6行,列标题为'ts_code'的数据

data.ix[[4,6],['trade_date', 'open', 'high']]#选取第5,7行的,列标题为'trade_date', 'open', 'high'的数据

data.ix[1]#选取第二行

7.选取指定条件的数据

data.ix[data['open']>=35]#选取'open'中所有大于35的数据

data.ix[data['open']>=35,[2,3]]#选取'open'中所有大于35的数据中的第3,4列

data[(data['open']>=35)&(data['open']<=35.7)]#选取‘open’中大于35且小于35.7的数据

data[(data['open']<=35)|(data['open']>=35.7)]#选取‘open’中小于35或大于35.7的数据

data[(data['open']<=35)]

8.drop函数删除

data.drop('open',axis=1)#删除指定列标题,0为行,1为列

data.drop('open',axis=1,inplace=True)#永久删除列标题

data.drop(['change', 'pct_chg', 'vol'],axis=1)

data.drop(data.columns[1:6],axis=1)

data.drop(4,axis=0)#按照行标题删除数据

9.作图

plt.scatter(data.index,data['close'])

plt.pie(data['open'],shadow=True,colors='g')

plt.scatter(data.index,data['high'],edgecolors='r',linewidths=0.5,alpha=0.5,color='p')

plt.title('HIGH_PRICE')

#同时绘制多条序列折线图

plt.figure(num=2, figsize=(20, 10), facecolor='y', edgecolor='r')

plt.plot(data['交易日期'], data[['open', 'high', 'close', 'low']])

plt.xticks(rotation=270) plt.show()

#绘制箱线图

data_box = data[['open', 'high', 'close', 'low']]

plt.figure(figsize=(20, 10))

plt.boxplot(data_box, meanline=True)

10.数学统计

data.describe()#按照列数据进行统计描述

data.cov()#构建各列之间的协方差矩阵

data.corr()#构建各列之间的相关系数矩阵

data.corrwith(data['high'])#构建“最高价”列数据与所有列数据的相关系数

data.min()#产生各列的最小值

data.max()#最大值

data.mean()#均值

data.median()#中位数

data.std()data.round(3)#保留三位小数

data.skew()#计算偏度

data.kurt()#计算峰度

11.对无效值的处理

'''删除法'''

sum(pd.isnull(data)) # 统计数据表各列无效数值个数

data.dropna() # 将直接删除所有包含无效数据的行

data.dropna(how='all') # 只删除全行皆为无效数据的行


'''填补法'''

data.fillna(7) # 使用7来替换所有无效数据

data.fillna(method='ffill') # 使用上面的数据进行填充

data.fillna(method='bfill') # 使用后面的数据进行填充

data.fillna({'三': 3, '四': 2, '五': 1, }) # 不同的列用不同的数值填充

data = data.fillna({'三': data_2['八'].mean, '四': data_2['四'].median, '五': 1, }) # 通过中位数和平均值进行填充

12.数据拼接组合

data_1=pro.daily(ts_code='600036.SH',start_date='20190607',end_date='20191011')#获取股票日收盘价数据

data_2 = pro.daily(ts_code='600136.SH', start_date='20190607', end_date='20191011') # 获取股票日收盘价数据

data_columns=pd.concat([data_1,data_2],axis=0)#按照行的方向进行拼接

data_row=pd.concat([data_1,data_2],axis=1)#按照列的方向进行拼接

#可以将列标题不同的数据框进行拼接

data_1.drop('ts_code',axis=1,inplace=True)

data_lost=pd.concat([data_2,data_1],axis=0)

data_lost['close']

data_1=pd.DataFrame(np.random.rand(3,4),index=[1,2,3],columns=['A','B','C','E'])

data_2=pd.DataFrame(np.random.rand(4,5),index=[1,2,4,5],columns=['A','D','C','E','F'])

data_lost_1=pd.concat([data_1,data_2],axis=0)

data_lost_2 = pd.concat([data_1, data_2], axis=1)

13.数据透视表和多层索引

#构造多层索引数据框i

#将A对应'一','二','三',将B对应'四','五'

data=pd.DataFrame(np.random.rand(6,5),index=[['A','A','A','B','B','C'],['一','二','三','四','五','六']],columns=[['甲','甲','乙','乙','乙'],['one','two','one','two','three']])

data.ix['A','甲']

data['甲']

data.ix['A',:]#为普通数据框添加外部索引

data=pd.DataFrame({'loc':np.random.choice(['a','b','c','d','e'],80), 'age':np.random.randint(34,45,80), 'six':np.random.choice(['男','女'],80), 'high':np.random.randint(150,187,80), 'money':np.random.normal(3000,40,80)})

data_=pd.pivot_table(data,index=['six','loc','age'])#按照'six','loc','age'的顺序

data_=pd.pivot_table(data,index=['six','loc','age'],values=['money'])

data_ = pd.pivot_table(data, index=['loc'], values=['money'],aggfunc=[np.sum,np.min])

14.对时间的处理

import datetime,time

% a 星期几的简写 % A 星期几的全称 % b 月分的简写 % B 月份的全称 % c 标准的日期的时间串 % C 年份的后两位数字 % d 十进制表示的每月的第几天 % D 月 / 天 / 年 % e 在两字符域中,十进制表示的每月的第几天 % F 年 - 月 - 日 % g 年份的后两位数字,使用基于周的年 % G 年分,使用基于周的年 % h 简写的月份名 % H 24小时制的小时 % I 12小时制的小时 % j 十进制表示的每年的第几天 % m 十进制表示的月份 % M 十时制表示的分钟数 % n 新行符 % p 本地的AM或PM的等价显示 % r 12小时的时间 % R 显示小时和分钟:hh: mm % S 十进制的秒数 % t 水平制表符 % T 显示时分秒:hh: mm:ss % u 每周的第几天,星期一为第一天 (值从0到6,星期一为0) % U 第年的第几周,把星期日做为第一天(值从0到53) % V 每年的第几周,使用基于周的年 % w 十进制表示的星期几(值从0到6,星期天为0) % W 每年的第几周,把星期一做为第一天(值从0到53) % x 标准的日期串 % X 标准的时间串 % y 不带世纪的十进制年份(值从0到99) % Y 带世纪部分的十制年份 % z, % Z 时区名称,如果不能得到时区名称则返回空字符。 % % 百分号

today=datetime.date.today().strftime('%Y%m%d')#获取今天日期

yesterday = (datetime.date.today() + datetime.timedelta(days=-1)).strftime('%Y%m%d')#获取昨天日期

this_month=datetime.date.today().strftime('%Y%m')#获取这个月的日期

now_time = datetime.datetime.now()#获取现在时间

hour=now_time.strftime('%H')#显示当前几点    

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,122评论 6 505
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,070评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,491评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,636评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,676评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,541评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,292评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,211评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,655评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,846评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,965评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,684评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,295评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,894评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,012评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,126评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,914评论 2 355