zoukankan      html  css  js  c++  java
  • pandas(一)

    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)  每行的前面有效值填充

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

      

      

      

  • 相关阅读:
    web项目优化
    mysql 优化笔记
    Java 调用 google 翻译
    Git回滚merge操作
    mybatis 批量插入 返回主键id
    idea tomcat debug 失效
    mysql 常用语句
    xstream 解析xml报文
    activeMQ 讲解及实战
    linux svn apache
  • 原文地址:https://www.cnblogs.com/saber-xi/p/10641835.html
Copyright © 2011-2022 走看看