美文网首页
Pandas——DataFrame

Pandas——DataFrame

作者: IConquer | 来源:发表于2018-07-07 14:17 被阅读0次

    https://blog.csdn.net/haruhi330/article/details/60872526

    pandas.DataFrame 的操作简单经验(创建,索引,增添,删除)

    在网上搜过许多关于pandas.DataFrame的操作说明,都是一些基础的操作,但是这些操作组合起来还是比较费时间去正确操作DataFrame,花了我挺长时间去调整BUG的。我在这里做一些总结,方便你我他。

    一创建DataFrame的简单操作:

    1.根据字典创造:

    
     import pandas as pd
     aa={'one':[1,2,3],'two':[2,3,4],'three':[3,4,5]}
     bb=pd.DataFrame(aa)
     bb
        one  three  two0    1      3    21    2      4    32    3      5    4`
    

    字典中的keys就是DataFrame里面的columns,但是没有index的值,所以需要自己设定,不设定默认是从零开始计数。

    bb=pd.DataFrame(aa,index=['first','second','third'])bb
             one  three  twofirst     1      3    2second    2      4    3third     3      5    4
    

    2.从多维数组中创建

    import numpy as np
     del aa
     aa=np.array([[1,2,3],[4,5,6],[7,8,9]])
     aa
     array([[1, 2, 3],       [4, 5, 6],       [7, 8, 9]])
     bb=pd.DataFrame(aa)
     bb
        0  1  20  1  2  31  4  5  62  7  8  9
    

    从多维数组中创建就需要为DataFrame赋值columns和index,否则就是默认的,很丑的。

     bb=pd.DataFrame(aa,index=[22,33,44],columns=['one','two','three'])
     bb
         one  two  three22    1    2      333    4    5      644    7    8      9
    

    3.用其他的DataFrame创建

    bb=pd.DataFrame(aa,index=[22,33,44],columns=['one','two','three'])bb
         one  two  three22    1    2      333    4    5      644    7    8      9cc=bb[['one','three']].copy()Cc
         one  three22    1      333    4      644    7      9
    

    这里的拷贝是深拷贝,改变cc中的值并不能改变bb中的值。

    cc['three'][22]=5bb
         one  two  three22    1    2      333    4    5      644    7    8      9 cc
         one  three22    1      533    4      644    7      9
    

    二.DataFrame的索引操作:

    对于一个DataFrame来说,索引是最烦的,最易出错的。

    .索引一列或几列,比较简单:

    bb['one']
     22    133    444    7Name: one, dtype: int32
    

    多个列名需要将输入的列名存在一个列表里,才是个collerable的变量,否则会报错。

    bb[['one','three']]
         one  three22    1      333    4      644    7      9
    

    2.索引一条记录或几条记录:

    bb[1:3]
         one  two  three33    4    5      644    7    8      9bb[:1]
         one  two  three22    1    2      3
    

    这里注意冒号是必须有的,否则是索引列的了。

    3.索引某几列的变量的某几条记录,这个折磨了我好久:

    第一种

    bb.loc[[22,33]][['one','three']]
         one  three22    1      333    4      6
    

    这种不能改变这里面的值,你只是能读值,不能写值,可能和loc()函数有关:

    bb.loc[[22,33]][['one','three']]=[[2,2],[3,6]]
     bb
         one  two  three22    1    2      333    4    5      644    7    8      9
    

    第二种:也是只能看

    bb[['one','three']][:2]
         one  three22    1      333    4      6
    

    想要改变其中的值就会报错。

    
     bb[['one','three']][:2]=[[2,2],[2,2]]-c:1: SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame.Try using .loc[row_index,col_indexer] = value insteadF:\Anaconda\lib\site-packages\pandas\core\frame.py:1999: SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame  return self._setitem_slice(indexer, value)
    

    第三种:可以改变数据的值!!!

    Iloc是按照数据的行列数来索引,不算index和columns

    bb.iloc[2:3,2:3]
         three44      9 bb.iloc[1:3,1:3]
         two  three33    5      644    8      9bb.iloc[0,0]
     1
    

    下面是证明:

     bb.iloc[0:4,0:2]=[[9,9],[9,9],[9,9]]
     bb
         one  two  three22    9    9      333    9    9      644    9    9      9
    

    三、在原有的DataFrame上新建一个columns或几个columns

    1.什么都不用的,只能单独创建一列,多列并不好使,亲测无效:

    bb['new']=[2,3,4]bb
         one  two  three  new22    9    9      3    233    9    9      6    344    9    9      9    4bb[['new','new2']]=[[2,3,4],[5,3,7]]KeyError: "['new' 'new2'] not in index"
    

    赋予的list基本就是按照所给index值顺序赋值,可是一般我们是要对应的index进行赋值,想要更高级的赋值就看后面的了。

    2.使用字典进行多列按index赋值:

    aa={33:[234,44,55],44:[657,77,77],22:[33,55,457]}
     bb=bb.join(pd.DataFrame(aa.values(),columns=['hi','hello','ok'],index=aa.keys()))
     bb
         one  two  three  new   hi  hello   ok22    9    9      3    2   33     55  45733    9    9      6    3  234     44   5544    9    9      9    4  657     77   77
    

    这里aa是一个字典和列表的嵌套,相当于一条记录,使用keys当做index名而不是一般默认的columns名。达到了按index多列匹配的目的。由于dict()储存是混乱的,之间用dict()而不给他的index赋值会记录错乱,这一点注意值得注意。

    四、删除多列或多记录:

    删除列

    bb.drop(['new','hi'],axis=1)
         one  two  three  hello   ok22    9    9      3     55  45733    9    9      6     44   5544    9    9      9     77   77
    

    删除记录

    bb.drop([22,33],axis=0)
         one  two  three  new   hi  hello  ok44    9    9      9    4  657     77  77
    

    DataFrame还有很多功能还没有涉及,等以后有涉及到,看完官网的API之后,还会继续分享,everything is ok。

    相关文章

      网友评论

          本文标题:Pandas——DataFrame

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