Python __ Pandas

发布时间 2023-04-04 10:33:02作者: kingwzun

简介

可以看做是Excel
是基于Numpy的.
优点:处理表格数据(混杂数据)
需要引用:import pandas as pd

Series(无用)

类似于Numpy的一维数组
优点:相较于Nump索引功能强大

输出默认带索引:(当为字典是,,默认键是索引)
s4 = pd.Series([9.53,9.62,9.72])
创建时可以指定索引:
s5 = pd.Series([1, np.nan, 7.0, 'abc'], index=['a','b','c','d'])

DataFrame(常用)

类似于Numpy的二维数组

基本操作

获取行列数据

在 Pandas 中,有多个方法可以选取和重新组合数据,如表所示:

方法 说明
df[val] 从DataFrame中选取单列或多列。val为布尔型数组时,过滤行; val为切片时,行切片
df.loc[val] 通过val选取单行或多行
df.loc[;,val] 通过val选取单列或多列
df.loc[val1,val2] 选取val1行、val2列的值
df.iloc[val] 通过整数位置,选取单行或多行
df.iloc[;,val] 通过整数位置,选取单列或多列
df.iloc[val1, val2] 通过整数位置,选取val1 行、val2列的值

具体说明如下:
1、读取行
如果想从 DataFrame 中获取某一行数据,可以通过位置或名称进行获取。
读取行有三种方法,分别是loc,iloc,ix。

方法名 参数 备注
loc 行标签 可以使用元组
iloc 行号 可以进行切片
ix iloc和loc的并 不推荐使用IX索引器,已弃用

示例:

  1. loc通过行标签索引来确定行的
import pandas as pd
d=[[1,2,3,4],[5,6,7,8]]
index=["one","two"]
df=pd.DataFrame(d, index=index)

print df.loc["one"]
  1. iloc通过行号索引来确定行
import pandas as pd
d=[[1,2,3,4],[5,6,7,8]]
index=["one","two"]
df=pd.DataFrame(d, index=index)

print df.iloc[0]

2、读取列
如果想从 DataFrame 中获取某一列数据为一个 Series, 可以通过类似字典标记或属性的方式:
[]括号里可以是列标签/列号
实例:

print df5['浦发银行'] #也可以是 df5[0]
#2020-10-14 9.53
#2020-10-15 9.62
#2020-10-16 9.72
#Name: 浦发银行, dtype: float64

df5[['浦发银行','民生银行']]  #可以是个元组
#           浦发银行   民生银行
#2020-10-14   9.53     5.33
#2020-10-15   9.62     5.35
#2020-10-16   9.72     5.39
df5[df5['浦发银行'] > 9.6]   # 同时可以进行筛选数据
#           浦发银行   民生银行
#2020-10-15   9.62     5.35
#2020-10-16   9.72     5.39

对行列赋值

对DataFrame中某一列的值进行修改,可通过直接赋值一个标量值或一组值:

df5 = pd.DataFrame({'a':[1,2,3],'b':[5,6,7],
                    'c':[9,10,11],'d':[13,14,15]},
                    index=['x','y','z'])
#    a   b   c   d
#x   1   5   9   13
#y   2   6   10  14
#z   3   7   11  15
df5['d'] = 1  # 对d列赋值为1
#    a   b   c   d
#x   1   5   9   1
#y   2   6   10  1
#z   3   7   11  1

df5['d'] = np.arange(3) # 对d列赋值为np.arange(3)
#    a   b   c   d
#x   1   5   9   0
#y   2   6   10  1
#z   3   7   11  2

如果赋值给一个 Series, 则会精准匹配对应索引的数值, 若 Series 缺失 DataFrame 某些索引,则对应位置为空

df5['d'] = pd.Series([2,5,9],index = ['y','z','a'])
df5

image

常用方法

reindex()

表示重新索引,如果某个索引值当前不存在,就会引入
缺失值;可以通过fill_value参数填充默认值,也可以通过method参数设置填充方法;
reindex方法的methon参数的选项:
ffill或pad 前向填充值
bfill或backfill 后向填充值
或者是fill_value直接指定缺失值为多少

汇总,计算和描述性统计

Pandas 拥有一套常用的数学和统计方法, 但都是基于没有缺失数据的假设而构建的。
image

常用方法

读取excel表中的多个sheet

对于导入xlsx,pandas默认只导入第一个sheet,如果想导入多个/其他sheet需要指定:

# 按照index读取,1代表第二张表,默认是0 即默认只读取第一张表
>>> df = pd.read_excel(r'D:\myExcel/1.xlsx', sheet_name=1)
>>> df
  name  Chinese
0   lc       78
1   lb       79

# 按照表名读取
>>> df = pd.read_excel(r'D:\myExcel/1.xlsx', sheet_name='Sheet2')
>>> df
  name  Chinese
0   lc       78
1   lb       79


# 同时读取两张表,输入参数为列表
# 返回的是一个有序字典
>>> dfs = pd.read_excel(r'D:\myExcel/1.xlsx', sheet_name=[0, 'Sheet3'])
>>> dfs
OrderedDict([(0,      name  math  science
0     bob    23       12
1  millor    32       32
2   jiken    61       89
3     tom    34       94
4    json    83       12
5    dela    96       67
6   rison    90       34), ('Sheet3',   name  English
0   ld       32
1   by       98)])

案例

【例】与书本不同,本节利用tushare读取招商银行股票数据,并进行 Pandas 基本操作。tushare为金融数据分析提供便捷、快速的接口,与投研和量化策略无缝对接 数据丰富 拥有丰富的数据内容,如股票、基金、期货、数字货币等行情数据,公司财务、基金经理等基本面数据。tushare是第三方库,因此,在首次使用时,需要通过pip安装。

import pandas as pd
import tushare as ts
import datetime
ZSYH = ts.get_hist_data('600036', '2020-08-31', '2020-09-11')
ZSYH.head(3)

image

ZSYH.tail(3)

image