一、pandas介绍
1、2008年Wes McKinney(韦斯·麦金尼)开发出的库
2、专门用于数据分析的开源python库
3、以numpy为基础,借力numpy模块在计算方面性能高的优势
4、基于matplotlib能够简便的画图
5、独特的数据结构
6、也是三个单词组合而成:panel + data + analysis
面板数据 - 来源于计量经济学,通常用来存储三维的数据
二、为什么使用pandas
1、numpy已经能够帮助我们处理数据,能够结合matplotlib解决部分数据展示等问题,那么pandas用在什么地方
2、便捷的数据处理能力
3、读取文件方便
4、封装了matplotlib、numpy的画图和计算
三、核心数据结构
1、pandas三大数据结构
DataFrame、Panel、Series
四、DataFrame
1、DataFrame结构
既有行索引,又有列索引的二维数组
2、如何创建更有意义的数据
import numpy as np
# 创建一个符合正态分布的10个股票5天的涨跌幅数据
stock_change = np.random.normal(0, 1, (10, 5))
stock_change
import pandas as pd
# 加上行列索引
pd.DataFrame(stock_change)
# 添加行索引
stock = ["股票%s" %str(i) for i in range (10)]
pd.DataFrame(stock_change, index=stock)
# 添加列索引
data = pd.date_range(start="20180101", periods=5, freq="B")
data
pd.DataFrame(stock_change, index=stock, columns=data)
3、DataFrame对象既有行索引,又有列索引
行索引:表明不同行,横向索引,叫index
列索引:表明不同列,纵向索引,叫columns
4、DataFrame的属性
常用属性:
(1)shape
(2)index:DataFrame的行索引列表
(3)columns:DataFrame的列索引列表
(4)values:直接获取其中array的值(排除行索引列索引后的值,就是ndarray)
(5)T:行列的转置
常用方法:
head():前几行
tail():后几行
五、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)
说明:
(1)设置新的下标索引
(2)drop:默认为False,不删除原来索引(把原来索引当成普通列),如果为True,删除原来的索引值
(3)返回一个新对象,不改变原对象
# 重设索引
data2.reset_index()
data2.reset_index().shape
data2.reset_index(drop=True)
data2.reset_index(drop=True).shape
3、设置新的索引
set_index(keys, drop=True)
说明:
(1)keys:列索引名称或者列索引名称的列表
(2)drop:默认True,删除原来的索引
(3)返回一个新对象,不改变原对象
# 设置新的索引
df = pd.DataFrame({'month': [1, 4, 7, 10],
'year': [2012, 2014, 2013, 1014],
'sale': [55, 40, 84, 31]})
df
# 以月份设置新的索引
df.set_index("month")
# month作为新的索引,并且month列也没有扔掉
df.set_index("month", drop=False)
# 设置多个索引,以年和月份
new_df = df.set_index(["year","month"])
new_df
new_df.index
我们说的索引,默认都是0—10的,对吧?我们在日常的数组里,索引都是隐藏的,也就是一个“虚”的存在,不算入列数或行数的。
那么,在这里的索引设置和后面的series索引设置里,他们的索引部分依然是“虚”的,你虽然看到了,但是他不能算入行数或列数里。
六、MultiIndex和Panel
1、MultiIndex
上面new_df被设置成了具有MultiIndex的DataFrame,可以用来存储三维数据
new_df.index它是多级或分层索引对象
index属性
说明:
(1)names:levels的名称
(2)levels:每个level的元组值
# MultiIndex
new_df.index.names
new_df.index.levels
2、Panel
Panel是一个用来承载数据的三维数据结构(用来存储三维结构的面板数据),它有三个轴,分别是items(0轴),major_axis(1轴),而minor_axis(2轴)。这三个轴为描述、操作Panel提供了支持
pandas.Panel(data, items, major_axis, minor_axis, dtype, copy)
说明:
(1)data:数据采取各种形式,如:ndarray,series,map,lists,dict,DataFrame
(2)items:axis=0,Panel中的每个items都对应一个DataFrame
(3)major_axis:axis=1,用来描述每个DataFrame的行索引
(4)minor_axis:axis=2,用来描述每个DataFrame的列索引
(5)dtype:每列的数据类型
(6)copy:复制数据,默认false
注意:自Pandas 0.25版本后,Panel结构已经被废弃
推荐的用于表示3D数据的方法是DataFrame上的MultiIndex方法,就是上面的具有MultiIndex的DataFrame
七、Series
1、如何获取DataFrame中某个股票的不同时间数据?这样的结构是什么?
即是抽取一行的数据,它是什么结构
data2
data2.iloc[1, :]
data2.iloc[1, :].index
2、Series是什么结构
带列索引的一维数组
3、Series属性和方法
(1)index属性:相关数据的索引标签
(2)values属性:一组数据(ndarray类型)
(3)例子:
# Series
sr = data2.iloc[1, :]
sr
sr.index
sr.values
type(sr.values)
4、创建Series
(1)通过已有数据创建
指定内容,默认索引(从0开始排)
pd.Series(np.arange(10))
指定索引
pd.Series([6.7, 5.6, 3, 10, 2], index=[1, 2, 3, 4, 5])
(2)通过字典数据创建
pd.Series({'red':100, 'blue':200, 'green':500, 'yellow':1000})
字典的键作为索引,字典的值作为具体的值
八、小结
1、DataFrame是即带行索引又带列索引的二维数据
2、Series是带索引的一维数组
3、DataFrame是Series的容器