美文网首页python
Pandas数据结构介绍

Pandas数据结构介绍

作者: IMISer | 来源:发表于2017-08-08 01:33 被阅读32次

    Pandas数据结构介绍

    Series

    • 声明对象
      Series是带索引功能的一维数组,其对象包含value和index基本属性
      s=pd.Series([1,2,3],index=['a','b','c'])
      s.index #['a','b','c']
      s.value #[1,2,3]

    • 取元素
      s[索引] # s[['b','c']]

    • 用Numpy数组或其他Series对象定义新的Series对象
      a=np.arrat([1,2,3])
      s1=pd.Series(a)
      s2=pd.Series(s)
      这样生成的新对象并不是副本而是原对象的引用

    • 筛选元素
      因为pandas是以Numpy为基础的,所以可以直接用Numpy中的一些办法
      s[s>5]

    • 运算
      运算的原理也与numpy相通
      np.log(s)

    • Series对象的组成元素
      unique()函数用来取出对象中不重复出现的元素
      vlaues_count()函数用来统计每个值的个数
      isin([值])返回是否在其中,布尔型

    • NaN处理
      s[s.isnull()]输出空值
      s[s.notnull()]输出非空值

    • Series与字典
      mydict={'red':1,'green':2,'yellow':3}
      s5=pd.Series(mydict)
      字典的索引自动变为Series的索引

    • Series对象之间的运算
      s1+s2只会进行索引值相同部分的相加生成新的Series对象,两者独有的索引值会也会存在,运算后对应的值为NaN

    DataFrame

    DataFrame对象就是一张强行带上索引列的二维表,出去index的那一列其余的列名保存在column属性中。

    定义对象

    • 传入字典
      dict={'color':['red','green','yellow'],'name':['ball','pen','pencil'],'price':[1,1,2,1,2]}
      frame=pd.DataFrame(dict)
      这样index列会默认设置为0,1,2,3.。。
      frame=pd.DataFrame(dict,index=['','',''])等
    • DataFrame(数据,index,column)
      frame=pd.DataFram(np.random.random(16).reshape((4,4)),index=[],columns=[])

    选取元素

    按列选取:frame['color']与fram.color的效果是一样的,返回的是Series对象
    按行选取:frame.ix[行的索引值] frame.ix[2]
    也可以:
    frame[0:1]选取第0行
    frame[1:3]选取第1,2行
    最后,如果获取存储在DataFrame中的一个元素,需要依次指定元素所在的列的名称、行的索引值或标签 frame['name'][3]

    赋值

    按照取值的逻辑自然就可以赋值、增加的新的行和列
    fram['new']=[...] 插入某列
    fram['new'][0]=
    fram['new']=Series
    疑问?DataFrame插入某行怎么办?

    元素所属关系

    frame[frame.isin([1.0,'pen'])]

    转置

    DataFrame的转置很简单直接 Fram.T即可实现

    删除一列

    del fram['new']

    筛选

    frame[frame<12] 符合条件的会被留下且位置不变。不符合条件的变成NaN

    嵌套字典生成DataFrame

    mydict={'red':['l1':1,'l2':2,'l3':3],'yellow':['l1':4,'l2':5,'l3':6],'green':['l1':7,'l2':8,'l3':9]}
    第一层嵌套是列,里面重复嵌套行。

    删除某行某列

    frame.drop([index1,index2...]) 删除行
    frame.drip([column1,column2....],axis=1) 删除列

    数据结构之间的运算

    就是Series和DataFrame之间的运算
    除了用运算符,以下函数也是可以的

    • add()
    • sub()
    • div()
    • mul()
      比如 frame1+frame2与 frame1.add(frame2)的效果是一样的
      Series和DataFrame之间的运算就有些复杂了,简而言之,两者运算靠共同的索引,不同的索引会造成打量的NaN

    可以看到Frame中的列索引与Ser想同的部分都做了相减。如果索引值没有想同的就会
    产生NaN

    函数与映射

    按行或列执行操作的函数

    f=lambda x: x.max()-x.min()
    frame.apply(f)按列执行
    frame.apply(f,axis=1) 按行执行

    统计函数

    frame.sum() fram.mean() 等依然可以按照列进行相关统计量的计算
    frame.describe() 将会列出所有描述性统计量

    排序

    sort_index() 可以对Series和DataFrame的索引进行排序
    sort_index(axis=1) 可以对DataFrame的横轴进行排序
    值排序
    ser.order() 默认升序 改变:ser.order(ascending=False)
    对frame 需要制定按照哪一列:
    frame.sort_index(by='price')

    NaN的处理

    过滤NaN

    • ser.dropna() 但fram.dropna()会删除NaN存在的整个行和列
      fram.dropna(how='all')删除行或列整个都是NaN的情况
    • 也可以索引过滤: ser[ser.notnull()]

    为NaN填充其他值

    • fram.fillna(值)
    • 不同的列填充不同:fram.fillna({'price':1,'color':null,'name':null})

    最后说一下,Series是可以层级的形式出现的。Series和DataFrame之间可以用stack(), unstack()函数互相转换

    相关文章

      网友评论

        本文标题: Pandas数据结构介绍

        本文链接:https://www.haomeiwen.com/subject/namzlxtx.html