pandas学习笔记(windows系统)持续更新中

pandas 学习笔记 以下仅个人学习记录如有引用就说明出处

1.安装pandas

python ide可以pip 安装,把下面的代码第一行改为当前电脑上的python的安装目录再拷贝到TXT文件中保存为bat文件后直接点击运行
cd C:\Program Files\Python38
python -m pip install --upgrade pip
python -m pip install numpy
python -m pip install pandas
说明:第一行为运行到python目录,第二行为升级本地pip版本,下面两行为安装模块

2.pandas 结构:

pandas 的结构核心为Series和DataFrame
Series 为一维数组,和numpy的数据结构一样一个数组内只能有一各数据类型,不能同时有两个或两个以上的数据类型。如:只能是int,str,float中的一个,这样的好处是可以提高访问速度
Times-Series:以时间为索引的Series
DataFrame 二维的Series

3.Series 的创建:

3.1通过一维数组创建:

#! /user/bin/env python
#_*_coding:utf-8 -*_
#__author__ = '株洲市易美智能工程有限责任公司'
#Email:yizhi8.@qq.com

import numpy as np
import pandas as pd
series = pd.Series([x for x in range(10,20,1)],index = None)#列表推导式创建数组
# series = pd.Series(['A','B','C','D'],index = [x for x in range(4)])#列表创建
print(series,series.dtype)

创建二选一就可以了,后面的index可以省略,如果省略的话就默认就是None
输出就不写了
3.2 字典方式创建:

#! /user/bin/env python
#_*_coding:utf-8 -*_
#__author__ = '株洲市易美智能工程有限责任公司'
#Email:yizhi8.@qq.com

import numpy as np
import pandas as pd
series = pd.Series({'A':[x for x in range(5)],'B':[x for x in range(20,30,2)]})
print(series)

4.DataFrame的创建:

DataFrame是一个表格式的结构,我认为和XLS有点象
DataFrame每一行和每一列都是一个Series
DataFrame的创建:
4.1通过二维数组创建:

#! /user/bin/env python
#_*_coding:utf-8 -*_
#__author__ = '株洲市易美智能工程有限责任公司'
#Email:yizhi8.@qq.com

import numpy as np
import pandas as pd
Data = pd.DataFrame(np.array(np.arange(100).reshape(20,-1)))
print(Data)

4.2 通过字典方式创建

#! /user/bin/env python
#_*_coding:utf-8 -*_
#__author__ = '株洲市易美智能工程有限责任公司'
#Email:yizhi8.@qq.com

import numpy as np
import pandas as pd
Data = pd.DataFrame({'A':[x for x in range(10)],'B':['A',True,'C','D',88,'F','G','H','I',5]})
print(Data)

这里在创建时并不要求是同一个数据类型但必须各列是一样的长度

5.股票列表的导入

5.1导入聚宽数据
安装jqdatasdk
先安装anadonda和get,再打开anadonda promt et cd定位到anaconda 的目录
再拷贝以下代码运行

pip install git+https://github.com/JoinQuant/jqdatasdk.git -i https://mirrors.aliyun.com/pypi/simple/
#! /user/bin/env python
#_*_coding:utf-8 -*_
#__author__ = '株洲市易美智能工程有限责任公司'
#Email:yizhi8.@qq.com

import numpy as np
import pandas as pd
import jqdatasdk as jq
x = jq.auth('***********','******')#导入账号密码
data = jq.get_price('000001.XSHE',start_date = '2020-01-01',end_date = '2020-02-29')#查询代码000001,从2020-01-01 到了2020-02-29的数据

获取股票数据的sdk 有QUANTAXIS,baostock,Tushare,OpenDataTools等

6.DataFrame操作

**这个代码在使用时请确定哪一行要用哪一行不要用,否则报错**
#! /user/bin/env python
#_*_coding:utf-8 -*_
#__author__ = '株洲市易美智能工程有限责任公司'
#Email:yizhi8.@qq.com

import pandas as pd
import numpy as np
import jqdatasdk as jq
x = jq.auth('1887318','00aa')
data = jq.get_price('000001.XSHE',start_date = '2020-01-01',end_date = '2020-02-29')
# for x in data.columns:
    print(x, end = '  ') #列出所有的列名
print('\n')
print(data[['close','high']].head(n= 15)) #查看多列的前15行数据,如果n = 15不写默认为5
print(data.close.tail(n = 15))#查看单列的后15个数据,如果n = 15不写默认为5
print(data.index)#输出所有的行名
data = data.T #行列翻转
data.columns = ['a','b','c','d','e','f']#列名改名,如果是这样改的话要所有列名要在列表内,否则报错
data = data.rename(columns = {'open':'o'})#列改名,如果只要改一个要做成字典
Series = data.open #把open行改为Series
data1 = data.copy()#复制DataFrame,这个只是简单的复制,如果有一个数据改变另外一个同时改变
print(data)
data2 = data[['open','close']]#这个列深层的切片,源数据改变不影响另一个,如果这个是只有用一对[]的话返回Series且不支持两个或以上的
# columns也不是深度拷贝
data3 = data['2020-02-07':'2020-02-17']
data3 = data[1:5]#DataFrame 行切片可以用行名和行序号,切片方法如果是行名的话两头都包括,如果是序列的话只包前不包后
data4 = data.iloc[0:5,0:15]#iloc,为index locate 用index索引进行定位,所以参数是整型,索引会在范围内寻找,
# 如果没有的话会忽略为空
data5 = data.loc['2020-01-02':'2020-03-12','open':'low']#loc 为columns索引参数必须为columns,如果是数字索引基本结构
# 必须保持不要求精确,DataFrame会在这个范围内寻找,如果是字母索引必须是正确的索引号,否则报错
data6 = data[1:5]#这种方式只能行索引切片
data7= data.iat[3,1]#这个iat 和上面的iloc的i是一样的为index
***data8 = data.at[5,'open']#这个at按理前面是index 后面是columns不知哪里不对***
data9 = data[data.colose <16] #按条件取行,返回所有符合条件的行

**这个代码在使用时请确定哪一行要用哪一行不要用,否则报错**

DataFrame sort

#! /user/bin/env python
#_*_coding:utf-8 -*_
#__author__ = '株洲市易美智能工程有限责任公司'
#Email:yizhi8.@qq.com
import pandas as pd
import numpy as np
import jqdatasdk as jq
jq.auth('1887','0aa')
data = jq.get_price('000001.XSHE',start_date = '2020-01-01',end_date = '2020-02-29')
data1 = data.sort_values(by = ['close','open'],ascending= [True,False])#排序,close 对应True,open对应False,
# 这个排序方式是先用close 以升序排列再用open以降序排列,axis没写默认行排列

DataFrame 插入删除列

#! /user/bin/env python
#_*_coding:utf-8 -*_
#__author__ = '株洲市易美智能工程有限责任公司'
#Email:yizhi8.@qq.com
import pandas as pd
import numpy as np
import jqdatasdk as jq
x = jq.auth('188718','0a')
data = jq.get_price('000001.XSHE',start_date = '2020-01-01',end_date = '2020-02-29')
data.insert(0,'aa',1) #插入列数据,前机的0为列序号,aa为列的columns,1为要插入的值,这个1可以为列表,
# 但列表的长度必须为DataFrame的列长度一至,要手入的值如果为一个值的话这个值会全列都是这一个值,如果是列表的话会按序号填充
data.insert(0,'inster',np.arange(len(data))) #插入列表
del data['close']#删除整列
data3 =data.drop('open',axis = 1)#返回删除的数据,对原数据没有影响

pandas --移动窗口rolling的概念

#! /user/bin/env python
#_*_coding:utf-8 -*_
#__author__ = '株洲市易美智能工程有限责任公司'
#Email:yizhi8.@qq.com
import numpy as np
import pandas as pd
index = pd.date_range('2020-01-01',periods = 200)#取从2019-01-01后延后200天的日期数值
data = pd.DataFrame(np.arange(len(index)),index = index,columns = ['test'])#产生DataFrame
print(data)
data['sum'] = data.test.rolling(5).sum()#3为向前移动5位,求移动三位后的的,添加sum列
data['mean'] = data.test.rolling(5).mean()#求移动5信后的一平均值,添加mean 列
data['mean-2'] = data.test.rolling(5,min_periods = 2).mean() #求移动5位后的平均值,但可以最小求两个的平均值,添加mean-2列
print(data)

DataFram join

#! /user/bin/env python
#_*_coding:utf-8 -*_
#__author__ = '株洲市易美智能工程有限责任公司'
#Email:yizhi8.@qq.com

import pandas as pd
import numpy as np
df1 = pd.DataFrame(np.ones(12).reshape(3,4),columns = list('abcd'),index = list('ABC'))
df2 = pd.DataFrame(np.zeros((3,5)),columns = list('efghi'),index = list('ABC'))
df3 = pd.DataFrame(np.zeros((5,2)),columns = list('jk'),index = list('AEBGH'))

print(df2.join(df1))#两个都有相同的行的效果
print(df1.join(df3)) #df3 和df1都有A,B行就可以join在一起,df3没有C行所以join后的C行就是'NaN'

plt.subplot

**#! /user/bin/env python
#_*_coding:utf-8 -*_
#__author__ = '易美智能工程有限责任公司'
#Email:yizhi8.@qq.com
import tushare as ts
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']
stock = '000590'
df1 = ts.get_k_data(stock,ktype='D')#采集数据
fig = plt.figure(stock+'的开盘、收盘、最高价、成交量曲线图',figsize=(10,8),facecolor='r',edgecolor='y')#设置图像的名称、大小、底色
fig_open = plt.subplot(221)#设置第一张小图的位置为2行2列的第一个位置
fig_open.plot(df1.open)#设置第一个图的数据为close
plt.title(stock+'的开盘价曲线')#设置第一个图的名称
fig_close = plt.subplot(222)
fig_close.plot(df1.close)
plt.title(stock+'的收盘价曲线')
fig_high = plt.subplot(223)
fig_high.plot(df1.high)
plt.title(stock+'的最高价曲线')
fig_volume = plt.subplot(224)
fig_volume.plot(df1.volume)
plt.title(stock+'的成交量曲线')
plt.show()#输出图像


**
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值