python中pandas

import pandas as pd
bj=pd.Series([4,7,-5,3])#产生带索引的一维数组
bj.values#返回数组值
bj.index#返回下标
bj1=pd.Series([4,7,-5,3],index=['a','b','c','d'])#自定义索引
bj1['a']#通过索引查找值
bj1[['a','c']]#通过索引查找值,建立子集
bj>2#逻辑判断,返回true or false
bj[bj>2]#返回bj>2为真的那些数据
'b' in bj1#逻辑判断,返回true
sdata={'a1':3500,'b1':7100,'c1':1600,'d1':5000}
obj3=pd.Series(sdata)#通过字典建立Series,其中sdata为字典。索引为原字典的键
stats1=['a1','b1','c','d']
stats2=['a1','b1','c']
stats3=['a1','b1','c','d','e']
obj1=pd.Series(sdata,index=stats1)#查找stats1中索引对应sdata的值,未找到返回NA
obj2=pd.Series(sdata,index=stats2)#查找stats2中索引对应sdata的值,未找到返回NA
obj3=pd.Series(sdata,index=stats3)#查找stats3中索引对应sdata的值,未找到返回NA
pd.isnull(obj1)#判断obj1中数值是否为空值,是返回TRUE,不是返回FALSE
pd.notnull(obj2)##判断obj1中数值是否为非空值,是返回TRUE,不是返回FALSE
obj1+obj3#索引相同的返回相加值,没有的返回空值
obj3.name="po"#理解数组的列名
obj3.index.name='ind'#理解索引的列名
'''Data.frame数据框'''
data={'state':['ohi','ohi','ohi','Nev','Nev'],
          'year':[2000,2001,2002,2001,2002],
          'pop':[1.5,1.7,3.6,2.4,2.9] }
frame=pd.DataFrame(data)#将字典转化为数据框。且数据有序排序。同时可以将等长列表转换成数据框。
frame2=pd.DataFrame(data,columns=['state','year','pop'])#列按照制定顺序排列
frame3=pd.DataFrame(data,columns=['state','year','pop1'])#若指定的列不在字典中,则返回NA列
frame4=pd.DataFrame(data,columns=['state','year','pop','pop1'],index=['one','two','three','four','five'])#指定列名columns,指定行名index
frame2['state']#索引字典名查找列值
frame2.year#索引字典名查找列值
frame4.ix['three']#通过索引查找数据框中某一行的值
frame4['pop1']=16#将16赋值给'pop1'所在列
frame4['pop1']=np.arange(5)#将(0,1,2,3,4)赋值给‘pop1’所在列
#将Series赋值给DataFrame时,精确匹配DataFrame的索引,空位将填上缺失值,无法匹配的元祖将剔除




val=pd.Series([2,4,5,6],index=['six','one','two','four'])
frame4['pop1']=val
frame4['ester']=(frame4.state=="ohi")#frame4增加一新列
del frame4['ester'] #删除‘ester’列
frame4.columns#展示列名
frame4.T#数据框转置
#嵌套字典,外层字典键值作为列名,内层字典键值作为行索引,索引自动排序形成结果。没有值的自动填充为NA
pop={"Nevada":{2001:2.4,2002:2.9},"Ohio":{2000:1.5,2001:1.7,2002:3.6}}
frameP=pd.DataFrame(pop)
#嵌套字典如果显示了指定索引,则会按索引值进行数据框生成,索引值搜索不到自动填充为NA
frameP1=pd.DataFrame(pop,index=[2001,2002,2003])
obj3=pd.Series([4.5,7.2,-5.3,3.6],index=['d','b','a','c'])
obj2=obj3.reindex(['a','b','c','d','e'])#按索引重新排序,未出现用NA填充
obj2=obj3.reindex(['a','b','c','d','e'],fill_value=0)#按索引重新排序,未出现用0填充
obj1=pd.Series(["blue","yellow","purple"],index=[0,2,4])
obj0=obj1.reindex(range(6),method='ffill')#向前找值填充。按行向前查找填充
obj1.reindex(np.arange(6),method='ffill')#向前找值填充
obj1.reindex(np.arange(6),method='bfill')#向后找值填充
frame4.drop('two')#drop删除的为行值,原数据不发生变化。del删除的为列值,原数值发生变化
frame4.drop(['one','five'])
frame4.drop('pop1',axis=1)#删除列,原数据不发生变化
'''索引、选取和过滤'''
data=pd.DataFrame(np.arange(16).reshape(4,4),index=['ohi','colo','that','newyord'],columns=['one','two','hthree','four'])
data['one']#索引列值
data[['one','two']]#索引列值,两列。索引行值用ix
data.ix['ohi','two']#选取'ohi'行,'two'列
data.ix[['ohi','colo'],['two','four']]#选取'ohi','colo'行,'two','four'列
data.ix[:,['two','four']]#选取所有行,,'two','four'列的值
'''排序和排名'''
obj=pd.Series(range(4),index=['d','a','b','c'])
obj.sort_index()#默认按a,b,c,d的行顺序排序
frame=pd.DataFrame(np.arange(8).reshape((2,4)),index=['three','one'],columns=['d','a','b','c'])
frame.sort_index(axis=1)#按列(列名)排序,abcd
frame.sort_index(axis=1,ascending=False)#按列(列名降序)降序排列,
obj=pd.Series([4,7,-3,2])
obj.order()#对Series中的数值进行排序
obj=pd.Series([4,np.nan,7,np.nan,-3,2])
obj.order()#值排序时,任何NA缺失值都会被放到Series的末尾
frame=pd.DataFrame({'b':[4,7,-3,2],'a':[0,1,0,1]})
frame.sort_index(by='b')#按b列值的大小升序排列
obj.rank()#秩排序,method='average','min','max','first'
'''带有重复值的轴索引'''
obj=pd.Series(range(5),index=['a,','a','b','b','c'])
obj['a']#返回两行,同理应用在数据框
'''汇总和计算描述统计'''
'''唯一值,值计数以及成员资格'''
obj=pd.Series(['c','a','d','a','a','b','b','c','c'])
uniques=obj.unique()#得到唯一数组
obj.value_counts()#计算重复次数,频数
pd.value_counts(obj.values,sort=False)#计算重复次数,频数,第二种方法
data=pd.DataFrame({'Qu1':[1,3,4,3,4],'Qu2':[2,3,1,2,3],"Qu3":[1,5,2,4,4]})
result=data.apply(pd.value_counts).fillna(0)#按行统计,统计12345在每一列的个数
result=data.apply(pd.value_counts,axis=1).fillna(0)#按列统计,统计12345在每一行的个数
'''处理缺失值'''
string_data=pd.Series(['aard','arti',np.nan,'avoc'])
string_data[0]=None #python 内置None 也会被当作NA处理
string_data.isnull()#判断是否是缺失值,返回 True False True False
from numpy import nan as NA#引入缺失值 符号
data=pd.Series([1,NA,3.5,NA,7])
data.dropna()#除去缺失值,原data数据不发生变化
data[data.notnull()]#选取无缺失值数据
'''对于DataFrame,dropna丢弃任何含缺少值的行,how='all'丢弃全为缺失值的行,axis=1,丢弃含缺失值的列'''
data=pd.DataFrame([[1,6.5,3],[1,NA,NA],[NA,NA,NA],[NA,6.5,3]])
data.dropna()#丢含弃缺失值的行
data.dropna(how='all')#丢弃所有数值均为缺失值的行
data[4]=NA#负值data的列名为4的列的值为NA
data.dropna(axis=1,how='all')#删除data中值全为NA的列
df=pd.DataFrame(np.random.randn(7,4))
df.ix[:4,1]=NA#df的第1列,0到4行为NA
df.ix[:2,2]=NA#df的第2列,0到2行为NA
df.ix[0,3]=NA
df.dropna(thresh=3)#thresh=3代表改行中有效值的个数,即保留非缺失值至少有3个的行
'''缺失值填充'''
d1=df.fillna(0)#原数据df不发生变化
df.fillna({1:0.1,3:10})#通过字典实现对不同列的填充
df.fillna({1:0.1,3:10},inplace=True)#fillna填充返回新对象,若对原数据进行修改,使用inplace=True
df.fillna(method='bfill')#向前填充,原数据不发生变化
df.fillna(method='bfill',limit=2)#limit=2连续填充两个缺失值
'''层次化索引'''
data=pd.Series(np.random.randn(10),index=[['a','a','a','b','b','b','c','c','d','d'],[1,2,3,1,2,3,1,2,2,3]])
data.index#索引标签
data['b']#索引b下的值
data.ix['b':'c']#索引b,c下的值
data.ix[['b','c']]#索引b,c下的值
data[:,2]#查找所有外层索引,内层索引为2的值
data.unstack()#.unstack将层次索引转化为DataFrame格式。外层索引名变为行名指标,内层索引名变为列名。更改原数据
data.unstack().stack#stack将DataFrame格式转化为层次索引。行名变成外层索引,列名变成内层索引。更改原数据
frame=pd.DataFrame(np.arange(12).reshape((4,3)),index=[['a','a','b','b'],[1,2,1,2]],columns=[['ohi','ohi','colo'],['Green','Red','Green']])
frame.index.names=['key1','key2']#行标签的标签名
frame.columns.names=['state','color']#列标签的标签名
frame.swaplevel('key1','key2')#两个行名置换,产生新对象,原数据不发生变化
frame.sortlevel(1)#对第二列行号进行排序,返回新对象,原数据不变
frame.swaplevel(0,1).sortlevel(0)
'''根据级别汇总数据'''
frame.sum(level='key2')#按第二个行名汇总求和
frame.sum(level='color',axis=1)#按第二个列名汇总求和
obj=pd.Series(range(5),index=['a,','a','b','b','c'])
obj.iget_value(-1)#选取Series中的最后一个值
frame.irow(0)#选取frame的第一行
frame.icol(-1)#选取frame的最后一列


  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值