pandas数据结构
Pandas的介绍
2008年WesMcKinney开发出的库
专门用于数据挖掘的开源python库
以Numpy为基础,借力Numpy模块在计算方面性能高的优势
基于matplotlib,能够简便的画图
独特的数据结构
pandas的优势
Numpy已经能够帮助我们处理数据,能够结合matplotib解决部分数据展示等问题,那么pandas学习的目的在什么地方呢?
增强图表可读性
- 回忆我们在numpy当中创建学生成绩表样式:
返回结果:
1 | array([[92,55,78,50,50], |
如果数据展示为这样,可读性就会更友好:
- 便捷的数据处理能力
读取文件方便
封装了Matplotlib、Numpy的画图和计算
Pandas中一共有三种数据结构,分别为: Series、DataFrame和Multilndex (老版本中叫Panel)。其中Series是一维数据结构,DataFrame是二维的表格型数据结构,Multilndex是三维的数据结构。
Series
Series是一个类似于一维数组的数据结构,它能够保存任何类型的数据,比如整数、字符串、浮点数等,主要由一组数据和与之相关的索引两部分构成。
Series的创建
1 | # 导入pandas |
- 参数:
- data: 传入的数据,可以是ndarray、list等
- index: 索引,必须是唯一的,且与数据的长度相等。如果没有传入索引参数,则默认会自动创建一个从0-N的整数索引。
- dtype: 数据的类型
通过已有数据创建
- 指定内容,默认索引
1 | pd.Series(np.arange(10)) |
1 | # 运行结果 |
- 指定索引
1 | pd.Series([6.7,5.6,3,10,2], index=[1,2,3,4,5]) |
1 | # 运行结果 |
- 通过字典数据创建
1 | color_count = pd.Series({'red':100, 'blue':200, 'green': 500, 'yellow': 1000}) |
1 | # 运行结果 |
Series的属性
为了更方便地操作Series对象中的索引和数据,Series中提供了两个属性index和values。
- index
1 | color_count.index |
- values
1 | color_count.values |
也可以使用索引来获取数据:
1 | color_count[2] |
DataFrame
DataFrame是一个类似于二维数组或表格(如excel)的对象,既有行索引,又有列索引。
行索引,表明不同行,横向索引,叫index,0轴,axis=0
列索引,表名不同列,纵向索引,叫columns,1轴,axis=1
DataFrame的创建
1 | # 导入pandas |
参数:
index: 行标签。如果没有传入索引参数,则默认会自动创建一个从0-N的整数索引。
columns: 列标签。如果没有传入索引参数,则默认会自动创建一个从0-N的整数索引。
通过已有数据创建
举例一:
1 | pd.DataFrame(np.random.randn(2,3)) |
回忆咱们在前面直接使用np创建的数组显示方式,比较两者的区别。
举例二: 创建学生成绩表
1 | # 生成10名同学,5门功课的数据 |
但是这样的数据形式很难看到存储的是什么的样的数据,可读性比较差!!
问题: 如何让数据更有意义的显示?
1 | # 使用Pandas中的数据结构 |
给分数数据增加行列索引,显示效果更佳。
- 增加行、列索引
1 | # 构造行索引序列 |
效果:
DataFrame的属性
- shape
1 | data.shape |
- index
DataFrame的行索引列表
1 | data.index |
- columns
DataFrame的列索引列表
1 | data.columns |
- values
直接获取其中array的值
1 | data.values |
- T
转置
1 | data.T |
- head(5): 显示前5行内容
如果不补充参数,默认5行。填入参数N则显示前N行
1 | data.head(5) |
- tail(3):显示后3行内容
如果不补充参数,默认3行。填入参数N则显示后N行
1 | data.tail(3) |
DatatFrame索引的设置
需求:
修改行列索引值
1 | stu = ["学生_" + str(i) for i in range(score_df.shape[0])] |
注意: 以下修改方式是错误的
1 | # 错误修改方式 |
重设索引
reset_index(drop=False)
设置新的下标索引
drop: 默认为False,不删除原来索引,如果为True,删除原来的索引值
1 | # 重置索引,drop=False |
1 | # 重置索引,drop=True |
以某列值设置为新的索引
set_index(keys, drop=True)
keys: 列索引名成或者列索引名称的列表
drop: boolean,default,True.当做新的索引,删除原来的列
设置新索引案例
1、创建
1 | df = pd.DataFrame({'month': [1,4,7,10], |
2、以月份设置新的索引
1 | df.set_index('month') |
3、设置多个索引,以年和月份
1 | df = df.set_index(['year', 'month']) |
注: 通过刚才的设置,这样DataFrame就变成了一个具有Multilndex的DataFrame。
Multindex与Panel
Multilndex
Multilndex是三维的数据结构;
多级索引(也称层次化索引)是pandas的重要功能,可以在Series、DataFrame对象上拥有2个以及2个以上的索引。
multilndex的特性
打印刚才的df的行索引结果
1 | df.index |
多级或分层索引对象
index属性
names: levels的名称
levels: 每个level的元组值
1 | df.index.names |
multilndex的创建
1 | arrays =[[1,1,2,2],['red','blue','red','blue']] |
Panel【了解】
panel的创建
class pandas.Panel (data=None, items=None, major_axis=None, minor_axis=None)
作用: 存储3维数组的Panel结构
参数:
data: ndarray或者dataframe
items: 索引或类似数组的对象,axis=0
major_axis: 索引或类似数组的对象,axis=1
minor_axis:索引或类似数组的对象,axis=2
1 | p = pd.Panel(data=np.arange(24).reshape(4,3,2),items=list('ABCD'),major_axis=pd.date_range('20130101',periods=3),minor axis=['first','second']) |