pandas 学习笔记 (随笔)

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通过一维数组创建:

```python

#! /user/bin/env python

#_*_coding:utf-8 -*_

#__author__ = '株洲市易美智能工程有限责任公司'

#Email:[email protected]

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 字典方式创建:

```python

#! /user/bin/env python

#_*_coding:utf-8 -*_

#__author__ = '株洲市易美智能工程有限责任公司'

#Email:[email protected]

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通过二维数组创建:

```python

#! /user/bin/env python

#_*_coding:utf-8 -*_

#__author__ = '株洲市易美智能工程有限责任公司'

#Email:[email protected]

import numpy as np

import pandas as pd

Data = pd.DataFrame(np.array(np.arange(100).reshape(20,-1)))

print(Data)

```

4.2 通过字典方式创建

```python

#! /user/bin/env python

#_*_coding:utf-8 -*_

#__author__ = '株洲市易美智能工程有限责任公司'

#Email:[email protected]

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 的目录

再拷贝以下代码运行

```python

pip install git+https://github.com/JoinQuant/jqdatasdk.git -i https://mirrors.aliyun.com/pypi/simple/

```

```python

#! /user/bin/env python

#_*_coding:utf-8 -*_

#__author__ = '株洲市易美智能工程有限责任公司'

#Email:[email protected]

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操作

```python

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

#! /user/bin/env python

#_*_coding:utf-8 -*_

#__author__ = '株洲市易美智能工程有限责任公司'

#Email:[email protected]

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

```python

#! /user/bin/env python

#_*_coding:utf-8 -*_

#__author__ = '株洲市易美智能工程有限责任公司'

#Email:[email protected]

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:[email protected]

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 学习笔记 (随笔))