python库基础--pandas
pandas入门
pandas提供了高级数据库和函数,使利用结构化,表格化数据的工作快速,简单,有表现力
导入:import pandas as pd
pandas数据结构介绍
Series和DataFrame
Series:
一种一维数组型对象,包含了一个值序列和一个数据标签,称为索引,最简单的一个序列可以仅有一个数组组成
obj = pd.Series([4,7,-2,1])
0 4
1 7
2 -2
3 1
dtype: int64
左边为索引,右边为值,若不指定索引,默认为0-N-1
属性:
obj.value # 获得值 array格式
obj.index # 获得索引
创建一个索引序列:
obj = pd.Series([1,2,3],index = ['a','b','c']) # 很像字典
取值: obj['a'],obj[['a','b','c']]
可以使用Numpy的函数或者风格进行操作,如:
布尔索引:obj[obj>2]
数学运算:obj*2
Numpy函数: np.exp(obj)
在另一个角度去看Series,可以认为它是一个长度固定的且有序(python中字典无序)的字典
可以使用字典来生成一个Series
dic_data = {'a':11,'b':22}
obj = pd.Series(dic_data)
可以输入一个索引数组来为字典位置进行匹配
obj = pd.Series(dic_data,index = ['b','a'])
若索引数组中出现了字典中不存在的key,则它对应的值则为NaN
pandas中可以使用:
pd.isnull(obj)
pd.notnull(obj) 来检测数据的缺失
Series的自动对其特性:
obj1 + obj2
会寻找索引相同的进行操作
若不存在对应的索引,则会给出一个NaN值
Series和其索引都有name属性,这个属性与pandas其他功能有紧密的联系
obj.name = 'aaa'
obj.index.name = 'aaa_index' 对其进行赋值
Series可以通过对索引赋值索引数组来对索引进行改变
obj.index = ['name1','name2']
DataFrame
DataFrame 是表示矩阵的数据表,它包含已排序的列集合,他的每一列可以是不同的值类型(整数,浮点,字符串),
DataFrame既有列索引也有行索引,可以视为一个共享相同索引的Series字典,在DataFrame中,数据被存储在一个以上的二维块中,
而非是列表,字典,或者其他一维数组的集合。
构建一个DataFrame数组:
利用等长度的Numpy数组或者列表构建
data = {'name':['a','b','c'],'age':[18,17,21]}
frame = pd.DataFrame(data)
names = np.array(['a','b','c'])
age = np.array([18,17,21])
data = {'name':names,'age':age}
frame = pd.DataFrame(data)
DataFrame会自动分配索引 0 - N-1
frame.head() # 拿到前五行
嵌套字典生成DataFrame:
obj = {'names':{1:'cc',2:'jj'},'age':{1:18,2:19}}
pd.DataFrame(obj)
外层key会被作为列索引 里层key会被作为行索引
含有Series的字典生成DataFrame:
name age old
0 a 18 False
1 b 17 False
2 c 21 True
pdata = pd.DataFrame({name:frame['name'],'age':frame['age']})
name age
0 a 18
1 b 17
2 c 21
指定列顺序:
pd.DataFrame(data,columns=['name','age'])
若传入的名称列表并不是字典的key,则会出现缺失现象
指行定索引值:
pd.DataFrame(data,index=['a','b','c'])
DataFrame取值:
1.取列
frame['key'] # 通过字典一样的key
frame.key # 像查找属性一样
返还的是一个Series数组 name为其key
列的值可以通过赋值来修改
frame['key'] = 1
当将列表或者数组赋值给一个列时,长度必须要相匹配
若被赋值的列不存在,则将会生成一个新的列
frame['old'] = frame['age'] >= 21
frame.old 则不可以生成新的列
对于不使用的列可以使用del来进行删除 ,就像python中对字典删除key一样
在DataFrame中选取的Series数组的修改会直接影响到DataFrame数组
2.取行
frame.loc[0]
DataFrame的name
frame.columns.name = '' # 行名的name
frame.index.name = '' # 索引的name
frame.values # 可以返还全部的值 array格式
索引对象
pandas中的索引对象是用来存储轴标签和其他元数据的
obj = pd.Series(range(3),index = ['a','b','c'])
index = obj.index
索引对象是不可以改变的
pd.index() 转为索引对象
索引对象的一些方法
append() 将原索引添加新的索引,产生新对象
difference() 计算两索引的差集
intersection() 交集
union() 并集
delete() 删除位置i 产生新序列
drop() 删除索引值() 产生新序列
insert() 在位置i插入 产生新序列
基本功能
重建索引
obj = pd.Series([1,2,3,4],index = ['a','b','c','d'])
obj.reindex(['aa','bb','cc','dd','ee'])
aa NaN
bb NaN
cc NaN
dd NaN
ee NaN
dtype: float64
会根据新索引来进行排序,但是若索引值不存在则会添加NaN
obj = pd.DataFrame({'name':['cc','jj','ee'],'age':[19,20,20]})
obj.reindex([1,2,0])
obj.reindex(columns = ['age','name'])
或者:
obj.loc[[1,2,0],['age','name']]
轴向上删除条目
obj = pd.DataFrame({'name':['cc','jj','ee'],'age':[19,20,20]})
new_obj = obj.drop(0)
name age
1 jj 20
2 ee 20
new_obj = obj.drop([0,1])
删除列:
new_obj = obj.drop(['name'],axis = 1)
new_obj = obj.drop(['name'],axis = 'columns')
修改原对象:
obj.drop(1,inplace=True)
索引,选择,过滤
Series索引和numpy类似
但是Series的索引不仅仅是只有数组,还可以有字母
obj['a']
obj[0]
obj[2:4] # 这种切片还是有头无尾
obj[[0,1]]
obj[obj<3]
obj['a':'b'] # 这种有头有尾
DataFrame
obj['name'] # 单个索引选择的是列
obj[:2] # 特殊情况,选择的是行,且有尾
obj[obj['name']=='cc'] # 布尔索引,选择的是行
obj.loc[0]['name','age']
obj.iloc[0][[0,1]] # 以整数索引方式拿值
计算
索引相同的会进行操作,不存在对应的则会返回NaN
使用内置方法计算:
df1.add(df2,fill_value=0)
对不上的一个使用0代替
sub 减法
div 除法
floordiv 整除
mul 乘法
pow 幂次方
DataFrame 和 Series的算数会用到广播机制
描述性统计的概述和计算
pandas1对象装配了一个常用的数学,统计学方法的集合
df.sum() # 求列和,返还一个Series对象
df.sum(axis = 'columns') 返还行和
.count() 计算非NA值个数
.describe() 计算各列汇总统计集合
min,max最大最小值
argmin,argmax 索引位置
idxmin,idxmax 索引标签
mean 均值
median 中位数
mad 平均值的平均绝对偏差
prod 所有值的积
var 方差
std 标准差
diff 计算第一个算数差值
pct_change 计算出当前元素和其上一个元素的值相差的百分比
Series中
obj['aa'].corr(obj['bb']) 计算aa和bb中非NA的,按索引对齐的值的相关性
obj['aa'].cov(obj['bb']) 计算协方差
DataFrame中:
obj.corr() 以矩阵的形式返还其相关性
obj.cov() 以矩阵形式返回协方差
唯一值和成员:
obj.unique() 给出一个array,里面是仅出现一次的值
obj.value_counts() 给出一个Series 里面有每个值出现的个数
obj.isin(['a','b']) 返还一个Series,值为bool类型,若在列表内,为True否则为False
obj[obj.isin['a','b']] 可以拿到一个在列表内元素组成的Series

浙公网安备 33010602011771号