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
data
data.shape
data.index
data.columns
data.values
data.T
data.head(2)
data.tail(1)
①修改行列索引,必须全部修改,不能修改单个索引
# 修改索引,必须全部修改
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/