一、简介
1、以Numpy为基础,借力Numpy模块在计算方面性能高的优势
2、基于matplotlib,能够简便的画图
3、拥有独特的数据结构
二、Pandas与Numpy的不同
Numpy已经能够帮助我们处理数据,能够结合matplotlib解决部分数据展示等问题,而pandas其优点是:
1、便捷的数据处理能力
2、读取文件方便
3、封装了Matplotlib、Numpy的画图和计算
三、Pandas的DataFrame数据结构
3.1 DataFrame
3.1.1、DataFrame对象既有行索引,又有列索引
- 行索引,表明不同行,横向索引,叫index
- 列索引,表明不同列,纵向索引,叫columns
3.1.2、DataFrame的属性
常用属性:
(1).shape
data.shape # 数据的形状元祖,即多少行,多少列 (10, 5) # 10行,5列
(2).index 行索引列表
(3).columns 列索引列表
(4).values 获取其中array的值
(5).T 转置,使行和列调转
3.1.3、DataFrame的方法
常用方法:
(1).head(5) 显示前5行内容,如果不补充参数,默认5行。填入参数N则显示前N行
(2).tail() 显示后5行内容,如果不补充参数,默认5行。填入参数N则显示后N行
3.1.4、DataFrame索引的设置
(1)修改行列索引值,注意:在修改行列索引值时,不能使用data.index[3] = '股票_3'这种方法单独修改某一行或列的索引值,一定要全部修改
stock_code = ["股票_" + str(i) for i in range(stock_change.shape[0])] # 必须整体全部修改 data.index = stock_code
(2)重设索引(行索引)
reset_index(drop=False)
- 设置新的下标索引
- drop:默认为False,不删除原来索引,如果为True,删除原来的索引值
# 重置索引,drop=False data.reset_index() index 2017-01-02 00:00:00 2017-01-03 00:00:00 2017-01-04 00:00:00 2017-01-05 00:00:00 2017-01-06 00:00:00 0 股票_0 -0.065440 -1.309315 -1.454515 0.579730 1.486024 1 股票_1 -1.732167 -0.834137 0.458615 -0.803918 -0.468786 2 股票_2 0.218056 0.199014 0.713468 0.548426 0.386234 3 股票_3 -0.422079 -0.337024 0.423285 -1.230792 1.328438 4 股票_4 -1.725307 0.075918 -1.917084 -0.165358 1.076451 5 股票_5 -0.815768 -0.286753 1.204420 0.733660 -0.062145 6 股票_6 -0.988209 -1.018152 -0.954173 -0.815390 0.502682 7 股票_7 -0.100341 0.611962 -0.068503 0.747384 0.143011 8 股票_8 1.000262 0.342420 -2.252971 0.939211 1.140803 9 股票_9 2.520647 1.553848 1.722530 0.612701 0.608881
# 重置索引,drop=True data.reset_index(drop=True) 2017-01-02 00:00:00 2017-01-03 00:00:00 2017-01-04 00:00:00 2017-01-05 00:00:00 2017-01-06 00:00:00 0 -0.065440 -1.309315 -1.454515 0.579730 1.486024 1 -1.732167 -0.834137 0.458615 -0.803918 -0.468786 2 0.218056 0.199014 0.713468 0.548426 0.386234 3 -0.422079 -0.337024 0.423285 -1.230792 1.328438 4 -1.725307 0.075918 -1.917084 -0.165358 1.076451 5 -0.815768 -0.286753 1.204420 0.733660 -0.062145 6 -0.988209 -1.018152 -0.954173 -0.815390 0.502682 7 -0.100341 0.611962 -0.068503 0.747384 0.143011 8 1.000262 0.342420 -2.252971 0.939211 1.140803 9 2.520647 1.553848 1.722530 0.612701 0.608881
(3)以某列值设置为新的索引
set_index(keys, drop=True)
- keys : 列索引名称或者列索引名称的列表
- drop : 默认为True,当做新的索引,删除原来的列
df = pd.DataFrame({'month': [1, 4, 7, 10], 'year': [2012, 2014, 2013, 2014], 'sale':[55, 40, 84, 31]}) month sale year 0 1 55 2012 1 4 40 2014 2 7 84 2013 3 10 31 2014
df.set_index('month') # 以月份设置新的索引 month sale year 1 55 2012 4 40 2014 7 84 2013 10 31 2014
df.set_index(['year', 'month']) # 设置多个索引,以年和月份 year month sale 2012 1 55 2014 4 40 2013 7 84 2014 10 31
注:通过刚才的设置,这样DataFrame就变成了一个具有MultiIndex的DataFrame。
3.2 MultiIndex
打印刚才的df的行索引结果,df是一个MultiIndex对象:多级或分层索引对象
df.index MultiIndex(levels=[[2012, 2013, 2014], [1, 4, 7, 10]], labels=[[0, 2, 1, 2], [0, 1, 2, 3]], names=['year', 'month'])
index属性:
- levels:每个level的元组值
- names:levels的名称
3.3 Panel
存储3维数组的Panel结构
注:Pandas从版本0.20.0开始弃用:推荐的用于表示3D数据的方法是DataFrame上的MultiIndex方法
四、Pandas的Series数据结构
series结构只有行索引
我们将之前的涨跌幅数据进行转置,然后获取'股票0'的所有数据
data = data.T # series type(data['股票_0']) pandas.core.series.Series # 这一步相当于是series去获取行索引的值 data['股票_0']['2017-01-02'] -0.18753158283513574