• 技术文章 >后端开发 >Python教程

    python中pandas.DataFrame(创建、索引、增添与删除)的简单操作方法介绍

    高洛峰高洛峰2018-05-29 15:23:05原创27775

    这篇文章python中pandas.DataFrame(创建、索引、增添与删除)的简单操作方法介绍,其中包括创建、索引、增添与删除等的相关资料,文中介绍的非常详细,需要的朋友可以参考借鉴,下面来一起看看吧。

    前言

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

    一、创建DataFrame的简单操作:

    1、根据字典创造:

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

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

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

    2、从多维数组中创建

    import numpy as np
    In [9]: del aa
    In [10]: aa=np.array([[1,2,3],[4,5,6],[7,8,9]])
    In [11]: aa
    Out[11]: 
    array([[1, 2, 3],
     [4, 5, 6],
     [7, 8, 9]])
    In [12]: bb=pd.DataFrame(aa)
    In [13]: bb
    Out[13]: 
     0 1 2
    0 1 2 3
    1 4 5 6
    2 7 8 9

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

    bb=pd.DataFrame(aa,index=[22,33,44],columns=['one','two','three'])
    In [15]: bb
    Out[15]: 
     one two three
    22 1 2 3
    33 4 5 6
    44 7 8 9

    3、用其他的DataFrame创建

    bb=pd.DataFrame(aa,index=[22,33,44],columns=['one','two','three'])
    bb
    Out[15]: 
     one two three
    22 1 2 3
    33 4 5 6
    44 7 8 9
    cc=bb[['one','three']].copy()
    Cc
    Out[17]: 
     one three
    22 1 3
    33 4 6
    44 7 9

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

    cc['three'][22]=5
    bb
    Out[19]: 
     one two three
    22 1 2 3
    33 4 5 6
    44 7 8 9
    
    cc
    Out[20]: 
     one three
    22 1 5
    33 4 6
    44 7 9

    二、DataFrame的索引操作:

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

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

    bb['one']
    Out[21]: 
    22 1
    33 4
    44 7
    Name: one, dtype: int32

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

    bb[['one','three']]
    Out[29]: 
     one three
    22 1 3
    33 4 6
    44 7 9

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

    bb[1:3]
    Out[27]: 
     one two three
    33 4 5 6
    44 7 8 9
    bb[:1]
    Out[28]: 
     one two three
    22 1 2 3

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

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

    第一种

    bb.loc[[22,33]][['one','three']]
    Out[30]: 
     one three
    22 1 3
    33 4 6

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

    bb.loc[[22,33]][['one','three']]=[[2,2],[3,6]]
    In [32]: bb
    Out[32]: 
     one two three
    22 1 2 3
    33 4 5 6
    44 7 8 9

    第二种:也是只能看

    bb[['one','three']][:2]
    Out[33]: 
     one three
    22 1 3
    33 4 6

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

    In [34]: 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 instead
    F:\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]
    Out[36]: 
     three
    44 9
    
    bb.iloc[1:3,1:3]
    Out[37]: 
     two three
    33 5 6
    44 8 9
    bb.iloc[0,0]
    Out[38]: 1

    下面是证明:

    bb.iloc[0:4,0:2]=[[9,9],[9,9],[9,9]]
    In [45]: bb
    Out[45]: 
     one two three
    22 9 9 3
    33 9 9 6
    44 9 9 9

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

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

    bb['new']=[2,3,4]
    bb
    Out[51]: 
     one two three new
    22 9 9 3 2
    33 9 9 6 3
    44 9 9 9 4
    bb[['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]}
    In [58]: bb=bb.join(pd.DataFrame(aa.values(),columns=['hi','hello','ok'],index=aa.keys()))
    In [59]: bb
    Out[59]: 
     one two three new hi hello ok
    22 9 9 3 2 33 55 457
    33 9 9 6 3 234 44 55
    44 9 9 9 4 657 77 77

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

    四、删除多列或多记录:

    删除列

    bb.drop(['new','hi'],axis=1)
    Out[60]: 
     one two three hello ok
    22 9 9 3 55 457
    33 9 9 6 44 55
    44 9 9 9 77 77

    删除记录

    bb.drop([22,33],axis=0)
    Out[61]: 
     one two three new hi hello ok
    44 9 9 9 4 657 77 77

    跟大家分享一篇关于python中pandas.DataFrame对行与列求和及添加新行与列示例,感兴趣的朋友们可以看看。

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

    相关文章:

    关于python中pandas.DataFrame对行与列求和及添加新行与列示例代码

    详解python中pandas.DataFrame排除特定行方法示例代码

    以上就是python中pandas.DataFrame(创建、索引、增添与删除)的简单操作方法介绍的详细内容,更多请关注php中文网其它相关文章!

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:python
    上一篇:关于Python中functools模块函数解析 下一篇:自己动手写 PHP MVC 框架(40节精讲/巨细/新人进阶必看)

    相关文章推荐

    • 一文看懂Python爬虫• isinstance在python中是什么意思• python是面向对象还是面向过程• python字典添加元素的方法是什么• python中怎么合并两个列表
    1/1

    PHP中文网