pandas是2008年WesMcKinney开发出的专门用于数据挖掘的开源python库,以Numpy为基础,借助numpy模块在计算方面性能高的优势,基于matplotlib,能够简便的画图,具有独特的数据结构
pandas特点
pandas中共有三种数据结构,分别为
Series是一个类似于一维数组的数据结构,能够保存任何类型的数据,如整数、字符串、浮点数等,主要由一组数据和与之相关的索引两部分构成
- import pandas as pd
- import numpy as np
- pd.Series(np.arange(0, 50, 10)) # 创建[0,50)步长为10的等差数组数据,索引默认
-
- pd.Series([1, 2, 3, 4.3, 5.2], index=[1,2,3,4,5]) # 指定数据和索引
-
- name = pd.Series({'name1':'XX', 'name2':'XY', 'name3':'YY', 'name4':'YX'}) # 通过字典数据创建
- name

- name = pd.Series({'name1':'XX', 'name2':'XY', 'name3':'YY', 'name4':'YX'}) # 通过字典数据创建
- name.index # 获取索引
-
- name.values # 获取数据值
-
- data = pd.Series([1, 2, 3, 4.3, 5.2], index=[1,2,3,4,5]) # 指定数据和索引
- data.index
-
- data.values

DataFrame是一个类似于二维数组或表格(如excel)的对象,既有行索引,又有列索引
- pd.DataFrame(np.random.randn(3, 5)) # 3行5列
-
- num = np.random.randint(50, 100, (3, 5))
- num
-
- # 传入标签索引
- column = ['第一列', '第二列', '第三列', '第四列', '第五列'] # 列标签索引
- # ind = ['第一行', '第二行', '第三行'] # 行标签索引
- ind = ['第' + str(i) + '行' for i in range(num.shape[0])] # 行标签索引,num.shape[0]即获取num数组的行号,此处为3
- data = pd.DataFrame(num, columns=column, index=ind)
- data
2. DataFrame属性方法- data
- data.shape
- data.index
- data.columns
- data.values
- data.T
- data.head(2)
- data.tail(1)

3. DatatFrame索引的设置①修改行列索引,必须全部修改,不能修改单个索引
- # 修改索引,必须全部修改
- ind = ['第_' + str(i) + '_行' for i in range(num.shape[0])] # 行标签索引,num.shape[0]即获取num数组的行号,此处为3
- data.index = ind
- data
-
- data.index[1] = '第二行'
- data # 报错:索引不支持可变操作,即不能单个修改

②重设索引
- data.reset_index() # 重置索引,默认drop=False,不删除原来索引
-
- data.reset_index(drop=True) # 重置索引,drop=True,删除原来索引

③以某列值设置为新的索引
- time = pd.DataFrame({'day': [365, 365*2, 365*3], 'month':[12*(i + 1) for i in range(3)], 'year': [1, 2, 3]})
- time
-
- time.set_index('year', drop=False) # 设置year为索引,drop=False表示不删除原来year那一列
-
- time.set_index(['year', 'month']) # 设置多个索引

MultiIndex是三维的数据结构,多级索引(层次化索引),是pandas的重要功能,可以在Series、DataFrame对象上拥有2个以及2个以上的索引
查看索引如下,多级或分层索引对象
- time0 = time.set_index('year', drop=False) # 设置year为索引,drop=False表示不删除原来year那一列
- time0.index # 获取year索引
-
- time = time.set_index(['year', 'month']) # 设置多个索引
- time.index # 获取year和month索引
-
- time.index.names # index的names属性
-
- time.index.levels # index的levels属性

①MultiIndex创建
对比前面设置的多个索引如下
- data = [['XY', 'YX', 'XX', 'YY'], [20, 18, 22, 19]] # 两层索引
- pd.MultiIndex.from_arrays(data, names=('姓名', '年龄')) # names指定索引名


其他补充
②panel创建(已弃用)
学习导航:http://xqnav.top/