python:pandas(6),用法及函数总结

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/genome_denovo/article/details/78057853

利用python进行数据分析

第五章:pandas入门

第六节,pandas用法及函数总结

Series

Series(list) #产生一个一维数组
obj=Series(list)
obj.values #取Series的值
obj.index #取Series的索引

自定义index
obj2=Series(list1, index=list2) #Series的values以为list1中的元素,index为list2中的元素,且索引顺序为list2的元素顺序
obj2[string] #取出索引值,string为Series的索引
obj2[string]=string #索引赋值
obj2[list] #取多个索引值

运算
obj2[obj>0] #取出obj2中values大于0的values及其index
obj2*2 #values各值乘以2

数值映射关系
‘b’ in obj2 #数值在obj2中返回True,否则返回False

Series传入字典
Series(dict) #dict的键为Series的index,dict的值为values

index顺序
Series的index顺序取决于index传入的list元素顺序,index的值为list的元素的值

判断NA
Series对象,obj4.isnull() 存在的NA值位置返回True,其他值的位置返回False,obj4.notnull()存在的NA值位置返回False,其他值的位置返回True

Series的运算
obj3+obj4,结果是有相同索引则值相加,有不同索引则值为NA

Series的name
obj4.name #Series的name
obj4.index.name #Series中index的name

索引修改
obj.index=list

DataFrame

DataFrame() #产生一个二维数组,既存在行索引,又存在列索引

生成DataFrame
dict={string: list}
DataFrame(dict) #dict这个字典,其键为DataFrame的列索引,值均为list,该list是DataFrame的values,且DataFrame的行索引(index)为(0,1,2,3 … …)是list元素的index

DataFrame(data, columns=list)
列的索引顺序由columns传入的list元素顺序决定

DataFrame(data, columns=list, index=list)
产生的DataFrame传入新的列索引,其值为NA,同时行索引根据index传入的list顺序进行排序,并可对索引名称进行修改

索引取值
frame为DataFrame对象,
frame[‘state’],frame.year #取列索引的两种方式
取出列索引对应的所有行索引及其值

取出行索引内容
取出行索引的两种区别,
1,取单个行索引,frame.ix[string]
>>> frame.ix['three']
year 2002
state Ohio
pop 3.6
debt NaN
Name: three
2,取多个行索引,frame.ix[list]
>>> frame2.ix[['three']]
······year state pop debt
three 2002 Ohio 3.6 NaN
3,如果行索引只有编号,没有具体的索引名称,可用
frame.loc[0]frame.ix[0]

列赋值
frame[‘debt’]=16.5 #该列所有值都为16.5
frame[‘debt’]=np.arange(5.) #利用numpy产生array数组并赋值

import numpy as np
np.arange(5.)
array([0, 1, 2, 3, 4])
np.arange(5.0)
array([1, 2, 3, 4, 5])

DataFrame中的值修改
DataFrame中的值要通过Series对象去修改,
frame[string列索引]=Series(list1, index=list2) #list1为产生的DataFrame对象其对应的string列的values,而list2是list1值对应行索引

逻辑向量
frame[‘eastern’]=frame.state==’Ohio’
frame2中state这一列若其值为Ohio,则eastern这一列为True,否则为False,第一个‘=’为赋值,第二个‘==’为条件判断

删除列
def frame[‘eastern’] #删除eastern这一列

转置
frame.T 转置,行转成列,列转成行

DataFrame的name
DataFrame可设定index的name和columns的name
frame.index.name=’year’
frame.columns.name=’state’
frame.name=’table’

DataFrame.values,取出的所有值作为一个二维数组

DataFrame的index
DataFrame.index
Index([a, b, c], dtype=object)
而这个Index对象是不可修改的,例如DataFrame.index=’d’ #TypeError
Index是可以从新定义的,但该方法不能改变索引对应值的顺序,更不能添加或删除索引及值
frame.index
Int64Index([1, 2, 3, 4, 5], dtype=’int64’)
frame.index=[2, 3, 4, 5, 6] #index从新赋值,但index的个数要和之前的DataFrame对象的index个数相同
同样的columns也可以从新赋值
frame.columns
Index([u’pop’, u’state’, u’year’], dtype=’object’)
frame.columns=[‘p’,’s’,’y’]

Index的方法和属性
书中表5-3当中的Index的方法和属性,需要一些例子说明

重新索引(与Index的从新定义方法不同)(.reindex
调用DataFrame的reindex将会根据新索引进行重排、添加和删除,如果某个索引值当前不存在,就引入NA值
obj.reindex(list, fill_value=0)
将list当中元素作为obj这个DataFrame的索引,NA值填充为0(fill_value),
obj.reindex(list, method=’ffill’),NA值向前填充
reindex的(插值)method选项
ffill或pad表示向前填充值
bfill或backfill表示向后填充值

frame.reindex(index=list, columns=list) #index和columns都可进行从新索引
丢弃横轴及纵轴索引
obj.drop(‘c’)或obj.drop([‘c’, ‘d’]) #丢弃横纵轴索引只需要在列表中加入名字

DataFrame对象的取值
一般分为索引对象取值,切片取值,布尔型数组取值
而利用标签的切片运算,与普通的Python字符串切片方法不同,标签的切片运算其末端是包含的
例如
data[:2] #选取DataFrame中的前两行数据
data[data[‘three’]>5] #选取three这一列数组大于5的所有行和列的数值
data[‘three’] #选取的是该列的单个对象
data[[‘three’]] #选取的是整个列的信息

data[‘three’] #选取列
data.ix[‘Ohio’] #选取行

DataFrame对象的运算
主要指DataFrame的加、减、乘、除运算
两个DataFrame对象,若存在相同索引,则数值进行运算,若存在不同索引,则计算出的数值用NA值代替,这里的运算仅仅指DataFrame的数值运算
运算方法:
df1+df2 # + - * /
df1.add(df2) # .add() .sub() .mul() .div()
df1.add(df2, fill_value=0) #表示,df1和df2中的数值相加,出现的NA值用df2中相同位置的数值代替

DataFrame和Series之间的运算
series(Series对象),frame(DataFrame对象)
series是一个一维数组,其索引与frame的列索引相同,当运算frame - series(frame与series进行相减运算)时,表示frame当中的每一行都减去series与frame对应列的数值
frame与series的计算也可以用 .add() .sub() .mul() .div()的算数方法

frame.sub(series, axis=0) #axis=0表示列的运算(默认条件下可以不写),axis=1表示行的运算
f=lambda x: x.max() - x.min()
frame.apply(f) #apply方法表示应用f这个函数

frame.apply(f) #应用于列
frame.apply(f, axis=1) #应用于行
而applymap相当于对DataFrame对象应用于map函数的作用
另外,也可以定义一个函数
返回Series对象的max及min的索引及值,并利用apply方法,应用到frame上,
def f(x):
····return Series([x.min(), x.max()], index=[‘min’, ‘max’])
frame.apply(f)

DataFrame的排序
sort_index方法
frame.sort_index() #按照索引列排序
frame.sort_index(axis=1) #按照索引行排序
frame.sort_index(axis=1, ascending=False) #降序排序
在进行sort_index时,任何缺失值默认都会被放到Series的末尾
frame.sort_index(by=’b’) #根据b列排序

DataFrame当中的计算统计函数
df(DataFrame对象)
df.sum() #计算每数值的和
df.sum(axis=1) #每数值的和
在进行sum和mean时,NA值会自动被排除
df.mean(axis=1, skipna=False) #表示存在NA值的那行在进行sum(求和)和mean(计算平均值)时,最终值为NA
df.idxmin, df.idxmax表示间接统计达到计算最小值或最大值时的索引
df.cumsum() #表示累积,计算累积的加和值
df.describe() #表示一次性输出多个汇总统计结果
对于数值型DataFrame,df.describe()会输出count(元素个数),mean(平均值),std(标准差),min(最小值),max(最大值)等。
对于非数值型DataFrame,df.describe()会输出count(元素个数),unique(元素种类),top(第一个元素的名称),freq(出现最多的元素的频率)
obj.unique() #得到Series中的唯一值数组
obj.value_counts() #计算一个Series中各值出现的频率
obj.isin() #用于判断矢量化集合的成员资格

data.dropna()函数可去除NA值
如果data为Series对象,则会去除NA值及其索引,如果data为DataFrame对象,默认会去除存在NA值的那行,无论该行存在多少个NA值
data.dropna(how=’all’) #则会去除DataFrame对象中全部都是NA值的那行
data.dropna(axis=1, how=’all’) #上述方法应用于全部NA值的那一列
data.fillna() #函数可对DataFrame对象中存在的NA值进行数值填充
data.fillna(0) #对所在NA值填充为0
data.fillna({1: 0.5, 3: -1}) #对1这一列的NA值填充为0.1数值,对3这一列的NA值填充为-1数值
data.fillna(method=’ffill’, limit=2) #NA值向前填充,且填充2次
data.fillna(data.mean()) #NA值填充为data这个Series对象的平均值

层次化索引,即表示两个以上的索引级别
在生成层次化索引的Series对象时,Series(list, index=[list1, list2]) #list1表示外层索引,而list2表示内层索引

层次化索引选取子集
data[‘b’] #选取外层b索引的内层所有值
list(data[‘b’]) #返回上述结果的list对象
str(data[‘b’][1]) #返回一个string对象
data.ix[‘b’, ‘d’] #取外层索引的b和内层索引的d,如果内层索引为int64对象,则用data.ix[‘b’, 2]
data.ix[[‘b’, ‘d’]] #取外层索引的b和d,即选取两个外层索引
data[:, 2] #选取内层索引,同时选取内层为2的对应的所有外层索引
data.unstack() #可将Series对象当中多层索引关系转换成一个DataFrame对象

DataFrame对象的层次化索引,每条轴都可以有分层索引
frame.index.names=[‘key1’, ‘key2’]
frame.columns.names=[‘state’, ‘color’]
分别对内层及外层索引进行命名
frame.swaplevel(‘key1’, ‘key2’) #可以将key1和key2两个索引关系进行转化,将key1这个外层索引,转成内层索引,将key2这个内层索引,转成外层索引
sortlevel 根据单个级别中的值对数据进行排序

利用level选项,可根据级别对DataFrame或Series对象进行数据统计
frame.sum(level=’key2’) #对DataFrame对象的key2列数值进行加和运算
frame.suam(level=’color’, axis=1) #对DataFrame对象的color行数值进行加和运算
frame.set_index([‘c’, ‘d’]) #可将c及d这两列中的数值转化为行索引,c为外层索引,d为内层索引
frame.set_index([‘c’, ‘d’], drop=False) #表示c及d这两列中的数值转化为行索引后,c及d列数据仍然保留
reset_index可将层次化索引移动到列内,作为DataFrame列的数值

猜你喜欢

转载自blog.csdn.net/genome_denovo/article/details/78057853