导图社区 pandas入门
这是我根据数据分析那本书总结的,不算是什么大家写的,但是也认真写啦。有错要指出呀!
编辑于2020-01-13 07:58:37pandas入门
基本数据结构介绍
Series
概念
一种一维数组型对象,由标签(索引)和值序列组成,索引在左边,值在右边
生成
pandas.Series(序列,index,dtype,),序列可以是列表,字典,元组,或者数组
索引
标签
obj['name'] && obj[['a','b','c']]
布尔
odj[obj>2]
应用数学函数
数乘
obj=obj*2
其他
numpy.exp(obj)
一些操作符
‘b' in obj
注意:
1.在应用字典作为数据传入时,如果再传入新的索引,会导致和以前一样的索引和之前对应(不一定非要位置对应),不一样的会出现NaN; 2.在Series操作中会自动对齐索引,比如加减法; 3.Series的索引可以通过按照位置赋值的方式进行改变。 obj.index = []
检查是否缺失:
pandas.isnull(obj)
pandas.notnull(obj)
一些常用属性:
obj.values
obj.index
obj.name && obj.index.name
DataFrame
概念:
表示的是矩阵的数据表,是一个二维数组,既有行索引也有列索引,可以看作一个共享相同索引的Series字典。
生成
运用等长度列表或者数组生成,字典的键作为列索引,值作为每一列的数据 行索引默认是range类型整数。
data={'a':[1,2,3],'b':[2,3,4],'c':[4,5,6]} frame = pandas.DataFrame(data)
嵌套字典
会把外部键作为列索引,内部键作为行索引
完整参数
pandas.DataFrame(data,colums,index,)
索引
列索引
frame.name
谨慎使用,仅在列名name有效python变量名时可以使用
frame['name']
行索引
位置索引
在行索引是range类型时有效
特殊属性loc
frame.loc['name']
列赋值
用列表或数组
长度必须一致,然后一一对应
用Series
Series索引会按照DataFrame重新排列,并在空缺位置填充缺失值,
如果被赋值的列不存在,就新生成一列,但frame.name生成不了新的列
注意:
1.在DataFrame中选取的列是原来的视图,对他的操作会反应到原来对象上,如果不想,可以显式使用copy方法 2.用嵌套字典生成时,内部字典的键被联合、排序后形成了结果的索引,。如果已经显示的指明索引,内部的键将不会被排序
属性
转置
frame.T
name
行
frame.index.name
列
frame.columns.name
values
DataFrame构造函数的有效输入
2D ndarray
数据的矩阵,行列的标签是可选参数
数组、列表和元组构成的字典
每个序列成为DataFrame的一列,所有的序列必须长度相等
Numpy结构化/记录化数组
与数组构成的字典一直
Series构成的字典
每个值成为一列,每个Series索引联合起来形成结果的行索引,也可以显示的传递索引
字典构成的字典
每一个内部字典成为一列,键联合起来形成结果的行索引
字典或Series构成的列表
列表中的每一个元素形成DataFrame的一行,字典键,或者Series索引联合起来形成列标签
列表或元组构成的列表
与2D ndarray一致
其他DataFrame
如果不显式传入索引,会应用之前的索引
NumPy MaskedArray
与2D ndarray基本一致,但是隐蔽值会在结果DataFrame中成为NA/缺失值
索引对象
概念
用于存储轴名称与轴标签等元数据,在生成Series和DataFrame时 所使用的任意数组或标签序列都可以在内部转化为索引对象
优势:
索引对象不可变,这使得在多种数据结构中分享索引对象更加安全 索引对象也可含有重复标签。
方法:
append
将额外的索引对象黏贴到原索引后,产生一个新的索引
difference
计算两个索引的差集
intersection
计算两个索引的交集
union
计算两个索引的并集
isin
计算表示每一个值是否在传值容器中的布尔数组
delete
将位置i的元素删除,并产生新的索引
drop
根据参数删除指定索引值,并产生新的索引
insert
在位置i插入元素,并产生新的索引
is_monotonic
如果索引序列递增就返回True
is_unique
如果索引序列唯一就返回True
unique
计算索引的唯一值序列
描述性统计的概述与计算
概念
内置了数学,统计学方法集合,大部分属于归约或汇总统计的类别,他们内建处理了缺失值功能,除非整个切片上都是NA,否则NA是被自动排除的。
归约法常用参数
axis
归约轴
level
如果轴是多层索引,该参数可以缩减分组层级
skipna
排除缺失值,默认为True
描述性统计和汇总统计方法
count
非NA值的个数
describe
计算Series或DataFrame各列的汇总统计集合
min,max
计算最大值,最小值
argmin,argmax
分别计算最大值,最小值所在的索引位置(整数)
idxmin,idxmax
分别计算最大值,最小值所在的索引标签
quantile
计算样本的从0到1间的分位数
sum
加和
mean
均值
median
中位数(50%分位数
mad
平均值的平均绝对偏差
prod
所有值的乘积
var
值的样本方差
std
样本标准差
skew
样本偏度(第三时刻)值
kurt
样本峰度(第四时刻)值
cumsum
累计值
cummin,cummax
累计值的最小值或最大值
cumprod
累计积
diff
计算第一个算数差值(对时间序列有用)
pct_change
计算百分比
相关性和协方差
Series
相关性:corr
计算两个Series中重叠的,非NA的,按索引对齐的值的相关性
Series.corr(Series)
协方差:cov
同corr
DataFrame
相关性:corr
以DataFrame形式返回相关性矩阵
frame.corr()
相关性:corrwith
1.计算出DataFrame中的行或列与另一个序列或DataFrame的相关性 2.当传入一个Series时,会返回一个含有为每列计算相关性值的Series 3.当传入一个DataFrame时,会计算匹配到列名的相关性数值 4.传入axis='columns'会逐列地进行计算
frame.corrwith(frame.columns_name)
frame.corrwith(columns_name)
协方差:cov
以DataFrame形式返回协方差矩阵
frame.cov()
唯一值、计数和成员属性
唯一值:unique()
obj.unique()
排序唯一值:unique().sort()
obj.unique().sort()
计数:value_counts()
obj.value_counts() 默认降序
pandas顶层方法 pandas.value_counts(obj.values,sort=False)
成员属性:isin()
执行向量化的成员属性检查,还可以将数据集以Series或DataFrame一列的形式过滤为数据集的值子集
obj.isin(['a','b']) 返回同样的布尔数组
与isin()相关方法:Index().get_indexer()
可以提供一个索引数组,这个索引数组可以将可能非唯一值数组转换为另一个唯一值数组
pandas.Index(Series1).get_indexer(Series2)
Series2中的每个元素在Series1中对应的索引 Series1就是那个唯一值数组
方法总结
isin()
计算表征Series中每个值是否包括于传入序列的布尔数组
match()
计算数组中每个值的整数索引,形成一个唯一值数组,有助于数据对齐和join类型操作
unique()
计算Series值中的唯一值数组,按照观察顺序返回
value_counts()
返回一个Series,索引是唯一值序列,值是计数个数,按照个数降序排序
在某些情况下,你可能想要计算DataFrame多个相关列的直方图
应用apply方法
应用applymap方法
基本功能
重建索引
reindex方法
Series调用reindex方法时,会将数据按照新的索引进行排列,如果一个新索引之前不存在,则会引入缺失值,
obj.reindex()
对于顺序数据,比如时间序列,在重建索引时可能会需要进行插值或填值,method参数可以规定填值方法
method参数的可选值
ffill
向前填充(缺失的位置的值和前一个一样)
bfill
向后填充
在DataFrame中,reindex既可以改变行索引,又可以改变列索引,如果只传入一个,默认是行,也可以指定传入行/列。
frame.reindex(index=,columns=,)
方法参数
index
新建作为索引的序列,可以是索引实例或任意其他序列型PYthon数据结构,索引使用时无需复制
method
插值方式
fill_value
通过重新索引,引入缺失数据时使用的替代值
limit
向前或向后填充时,所需填充的最大尺寸间隔(以元素数量)
tolerance
向前或向后填充时,所需填充的不精确匹配下的最大尺寸间隔(以绝对数字距离)
level
匹配MultiIndex级别的简单索引,是否选择子集
copy
如果为True,即使新索引等于就索引,也总是复制底层数据。如果是False,则在索引相同时不要复制数据
轴向上删除条目
drop方法(修改数组形状,这个方法直接操作原对象而不是新对象)
Series上
obj.drop('name')或obj.drop(['b','c'])
DataFrame上
默认删除行索引
frame.drop('name',axis=0)
frame.drop(['a','b'])
手动删除列索引
frame.drop('a',axis=1))
inplace参数
默认是True,会清楚被删除的数据
索引、选择、过滤
Series
索引
直接按照名字
obj['z'] && obj[['c','v','b']]
整数索引
odj[1]
切片
obj[1:2] &&obj['z':'x']
和一般切片不一样的是,切片两边都包括
布尔
obj[obj>4]
选择
过滤
DataFrame
索引
对行
frame[:2]
对列
frame['nam']
loc(轴标签)索引
frame.loc['行','列']
这里面的切片前后都包括
iloc(整数标签)索引
frame.iloc[1,2]&&frame.iloc[:,2]
这里面的切片前闭后开
选择
frame.at[label_i,label_j]
根据行列标签选择单个标量值
frame.iat[i,j]
根据行列整数位置选择单个标量值
frame.reindex()
通过行列标签选择行/列
frame.get_value && frame.set_value
根据行或列的标签设置单个值
整数索引
为保持一致性,如果你有一个包含整数的轴索引,数据选择时请始终使用标签索引,为了更精确的处理,可以使用loc(用于标签)iloc(用于整数)
算数与数据对齐
概念
当将不同索引对象相加时,如果存在某个索引对不同,则返回结果是索引对的并集。之前相同的索引的值对应相加,不同索引位置的为NaN
使用填充值的算数方法
一般像数组中的计算会有处理机制,比如reindex中,都会有fill_value参数
灵活的算数方法(加上一个‘r'就是原来方法的翻转)
add radd
加
sub rsub
减
div rdiv
除
floordiv rfloordiv
整除
mul rmul
乘
pow rpow
幂次方
DataFrame和Series间的操作
广播机制
默认之间的数学操作会将Series的索引和DataFrame的列进行匹配,并广播到各行
如果像广播到每一列,就在算数运算符中把axis改为index或0
对于不同时在两个数组中的索引,会取并集
函数应用与映射
1.一般Numpy中的函数都可以应用到pandas对象上
2.应用到一行一列上的方法还有DataFrame的apply方法
apply可以接受函数作为方法,axis来修改作用轴,默认是对列操作,即0轴,而且函数f也可以有返回值
3.逐元素操作方法
applymap方法
应用在DataFrame上,与apply方法一样用,不过没有轴了
map方法
和python内置map类似
排序与排名
Series中
键排序
sort_index()
默认升序,可以修改ascending参数’是否‘来决定是否默认
值排序
sort_values()
DataFrame中
函数和Series中相同,但DataFrame中可以 多列同时排名
frame.sort_values(by=['a','b'])
排名函数rank()
方法参数method
average
默认:每个组中分配平均排名
min
对整个组使用最小排名
max
对整个组使用最大排名
first
按照值在数据中出现的次序分配排名
dense
类似于min,但组间排名总是增加1,而不是一个组中的相等元素的数量
含有重复标签的轴索引
判断索引是否唯一
obj.index.is_unique
索引重复的轴时,会取出所有该标签的数据
2020.01.09
注意