欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

pandas(一)

程序员文章站 2022-04-09 14:02:56
import numpy as py import pandas as pd Series对象 data= pd.Series([0.25,0.5,0.75,1.0]) 默认索引是数字 data=pd.Series([0.25,0.5,0.75,1.0],index=['a','b','c','d' ......

import numpy as py 

import pandas as pd

 

series对象

data= pd.series([0.25,0.5,0.75,1.0])   默认索引是数字

data=pd.series([0.25,0.5,0.75,1.0],index=['a','b','c','d'])   用字符串定义索引,也可以用不连续的索引

data['b']   

data['a':'c']  支持切片操作

 

pd.series(data,index=index)

 

data可以是列表或numpy数组

pd.series([2,4,6])

也可以是标量,创建时会重复填充到每个索引上

pd.series([5,index=[100,200,300])

也可以是字典,index默认是字典的键

pd.series({2:'a',3:'b'})

 

series的字典式映射方法

 data=pd.series([0.25,0.5,0.75,1.0],

        index=['a','b','c','d'

      )

判断data中是否有a索引

'a' in data

获取data索引

data.keys()

获取所有数据

list(data.items())

增加新索引

data['e']=10.25

切片:

  显示索引做切片,包含最后一个值

  data['a':'c']

  隐式整数索引做切片,不包含年最后一个值

  data[0:2]

掩码:

  data[(data>0.3) & (data<0.7)]

花哨索引:

  data[['a,'e']]

 

索引器:为了防止series为整数索引是,取值为显式索引,切片为隐式索引而混淆

 

  loc:表示取值和切片都是显式

  data=pd.series(['a','b','c'],index=[1,3,5])

  data.loc[1]

  data.loc[1:3]

 

  iloc:表示取值和切片都是隐式

  data.iloc[1]

  data.iloc[0:2]

 

 

  

 

 

 

dataframe对象

通过字典列表创建

  data=[{'a':i,'b':2*i} for i in range(3)]

  x=pd.dataframe(data)

通过series对象创建

  pd.dataframe({'data':data,'age':[1,2,3,4]) 

*注意此处data是前面series创建好的有索引的对象

通过numpy创建

pd.dataframe(np.random.rand(3,2),

      columns=['name','age'],

      index=['a','b','c']

      )

x.index获取行索引标签,x.columns获取列索引标签

 

pandas 的index对象

创建对象

ind=pd.index([2,5,6,7,11])

切片,索引

ind[1],ind[::2]

inda=pd.index([1,3,5,7,9])

indb=pd.index([2,3,5,7,11])

交集

inda & indb 

并集

inda | indb

异或

inda ^ indb

 

dataframe数据选择方法

 

name = pd.series({'a':'xi','b':'lin','c':'saber'})

age = pd.series({'a':18,'b':20,'c':'18'})

data = pd.dataframe({'name':name,'age':age})

 

data['name'] 等价于data.name,推荐前者

data.values  查看数组数据

data.values[0] 查看第一行数据

data.t 转置

 

loc,iloc与series对象中的用法相同

data.loc[:'lin',:'age']

data.iloc[:3,:2]

ix混合使用,不常用

data.ix[:3,:'age']

与掩码和花哨索引结合使用

data.loc[data.age>18,['name','age']]

更新数据

data[0,1]= 20

numpy通用函数pandas也适用

 

当用两个series对象创建dataframe对象时,会取两个对象的并集,没有的用nan代替

两个dataframe运算时也适用

也可以自定义缺失值

a=pd.dataframe(np.random.randint(0,20,(2,2)),

        columns=list('ab'))

b=pd.dataframe(np.random.randint(0,10,(3,3)),

        columns=list('bca'))

fill = a.stack().mean()

a.add(b,fill_value=fill)   a的缺失值用fill填充

 

缺失值处理:

  常用标签nan(not a number)

  val = np.array([1,np.nan,3,4])

  val.sum,max,min  会将nan的影响算进去

  np.nansum(val) ,nanmax,nanmin 忽略nan的影响

  

  data= pd.series([1,np.nan,'hello',none])

  发现缺失值:

  data.isnull()   

  data[data.notnull()]     

  剔除缺失值:

  data.dropna()

  df = pd.dataframe([[1,np.nan,2],

           [2,3,5],

           [np.nan,4,6]])

  df.dropna()    删除含有缺失值的整行数据   ,axis=1或axis='columns' 删除整列数据

  df[3] = np.nan

  df.dropna(axis='columns',how='all)   all表示删除全是缺失值的那行,any表示有缺失值就删除

  df.dropna(axis='row',thresh=3)  表示最少含有3个非缺失值的行才会被保留

 

  填充缺失值:

  data=pd.series([1,np.nan,2,none,3],index=list('avcde'))

  data.fillna(0)  缺失值用0填充

  data.fillna(method='ffill')  用缺失值前面的有效值填充,bfill用后面的有效值填充

  data.fillna(method='ffill',axis=1)  每行的前面有效值填充

  如果缺失值前面没有值,那么仍然是缺失值