使用pandas,首先需要熟悉它的2个主要的数据结构:Series和DataFrame。

Series

series是一种类似于一维数组的的对象,它由一组数据(各种Numpy数据类型)以及一组与之相关的数据标签(索引)组成。

In [1]: from pandas import Series,DataFrame

In [2]: import pandas as pd

In [3]: obj=Series([4,7,-5,3])

In [4]: obj
Out[4]:
0 4
1 7
2 -5
3 3
dtype: int64

Series的字符串表现形式为:索引在左边,值在右边。由于没有为数据设定索引,会自动创建一个从0到N-1(N为数据的长度)的整数型索引。可以通过series的values和index属性获取其数组的表现形式和索引对象。

In [5]: obj.values
Out[5]: array([ 4, 7, -5, 3], dtype=int64) In [6]: obj.index
Out[6]: RangeIndex(start=0, stop=4, step=1)

另外,还可以创建一个series带有一个对各个数据点进行标记的索引:

In [7]: obj2=Series([4,7,-5,3],index=['b','c','d','a'])

In [8]: obj2
Out[8]:
b 4
c 7
d -5
a 3
dtype: int64 In [9]: obj2.index
Out[9]: Index(['b', 'c', 'd', 'a'], dtype='object')

与普通的numpy数组相比,你可以通过索引的方式选区series的单个或一组值:

In [10]: obj2['a']
Out[10]: 3 In [11]: obj2['d']
Out[11]: -5 In [12]: obj2['d']=6 In [13]: obj2['d']
Out[13]: 6 In [14]: obj2[['c','a','d']]
Out[14]:
c 7
a 3
d 6
dtype: int64

注意:选取一组值的时候,obj2[['c','a','d']]是由2个[]组成。

numpy数组的数组运算都会保留索引与值之间的链接:

In [15]: obj2
Out[15]:
b 4
c 7
d 6
a 3
dtype: int64 In [16]: obj2[obj2>0]
Out[16]:
b 4
c 7
d 6
a 3
dtype: int64 In [17]: obj2[obj2-5>0]
Out[17]:
c 7
d 6
dtype: int64 In [18]: obj2*2
Out[18]:
b 8
c 14
d 12
a 6
dtype: int64

还可以将series看成一个定长的有序字典,因为它是索引值到数据值的一个映射。它可以用到许多需要字典参数的函数中:

In [23]: 'a'   in obj2
Out[23]: True In [24]: 'e' in obj2
Out[24]: False

注意:只能用索引,不能用数据值

In [26]: obj2
Out[26]:
b 4
c 7
d 6
a 3
dtype: int64 In [27]: 3 in obj2
Out[27]: False

如果数据被存放在一个python字典中,也可以直接通过这个字典来创建series:

In [28]: sdata={'ohio':35000,'Texha':71000,'Oraige':16000,'Utah':5000}

In [29]: obj3=Series(sdata)

In [30]: obj3
Out[30]:
ohio 35000
Texha 71000
Oraige 16000
Utah 5000
dtype: int64

如果只传入一个字典,则结果中series中的索引就是原字典的键(有序排列)

In [31]: states=['California','ohio','Utah','Oraige']

In [32]: obj4=Series(sdata,index=states)

In [33]: obj4
Out[33]:
California NaN
ohio 35000.0
Utah 5000.0
Oraige 16000.0
dtype: float64

上面中,sdata中跟states索引相匹配的那3个值会被找出来并放到相应的位置上。未找到的就用NaN表示。

pandas中的isnull和notnull可用于检测缺失数据

In [34]: pd.isnull(obj4)
Out[34]:
California True
ohio False
Utah False
Oraige False
dtype: bool In [35]: pd.notnull(obj4)
Out[35]:
California False
ohio True
Utah True
Oraige True
dtype: bool

series中也有类似方法:

In [37]: obj4.isnull()
Out[37]:
California True
ohio False
Utah False
Oraige False
dtype: bool In [38]: obj4.notnull()
Out[38]:
California False
ohio True
Utah True
Oraige True
dtype: bool

对于很多应用而言,Series最重要的一个功能就是:它在算术运算中会自动对其不同索引的数据。

In [39]: obj3
Out[39]:
ohio 35000
Texha 71000
Oraige 16000
Utah 5000
dtype: int64 In [40]: obj4
Out[40]:
California NaN
ohio 35000.0
Utah 5000.0
Oraige 16000.0
dtype: float64 In [41]: obj3+obj4
Out[41]:
California NaN
Oraige 32000.0
Texha NaN
Utah 10000.0
ohio 70000.0
dtype: float64

Series对象本身及其索引都有一个name属性,该属性跟pandas其他关键功能关系非常密切:

In [42]: obj4.name

In [43]: obj4.name='population'

In [44]: obj4
Out[44]:
California NaN
ohio 35000.0
Utah 5000.0
Oraige 16000.0
Name: population, dtype: float64 In [45]: obj4.index.name='state' In [46]: obj4
Out[46]:
state
California NaN
ohio 35000.0
Utah 5000.0
Oraige 16000.0
Name: population, dtype: float64

Series的索引可以通过赋值的方式就地修改:

In [47]: obj
Out[47]:
0 4
1 7
2 -5
3 3
dtype: int64 In [48]: obj.index=['Bob','Steve','Jeff','Ryan'] In [49]: obj
Out[49]:
Bob 4
Steve 7
Jeff -5
Ryan 3
dtype: int64

DataFrame

DataFrame是一个表格型的数据结构。它含有一组有序的列,每列可以是不同的值类型/(数值丶字符串丶布尔值等)。DataFrame既有行索引也有列索引,它可以被看做由Series组成的字典(共同一个索引)。跟其他类似的数据结构相比,DataFrame中面向行和面向列的操作基本上是平衡的。其实,DataFrame中的数据是以一个或多个二维块存放的(而不是列表/字典或别的一维数据结构)。

构建DataFrame的办法很多,最典型的就是由一个等长列表或Numpy数组组成的字符串:

In [52]: data={'state':['onio','onio','linux','hp-ux','red-hat'],
...: 'year':[2000,2001,2002,2001,2002],
...: 'pop':[1.5,1.7,3.6,2.4,2.9]} In [53]: frame=DataFrame(data) In [54]: frame
Out[54]:
state year pop
0 onio 2000 1.5
1 onio 2001 1.7
2 linux 2002 3.6
3 hp-ux 2001 2.4
4 red-hat 2002 2.9

结果DataFrame会自动加上索引(和Series一样),且全部列会被有序排列

如果指定了列序列,则DataFrame就会按照指定顺序进行排列:

In [55]: DataFrame(data,columns=['year','state','pop'])
Out[55]:
year state pop
0 2000 onio 1.5
1 2001 onio 1.7
2 2002 linux 3.6
3 2001 hp-ux 2.4
4 2002 red-hat 2.9

跟series一样如果传入在的列在数据中找不到,就会产生NA值:

In [60]: frame2=DataFrame(data,columns=['year','state','pop','debt'],index=['one','two','three','four','five'])

In [61]: frame2
Out[61]:
year state pop debt
one 2000 onio 1.5 NaN
two 2001 onio 1.7 NaN
three 2002 linux 3.6 NaN
four 2001 hp-ux 2.4 NaN
five 2002 red-hat 2.9 NaN
In [62]: frame2.columns
Out[62]: Index(['year', 'state', 'pop', 'debt'], dtype='object')

通过类似字典标记的方式或属性的方式,可以将DataFrame的列获取为一个Series:

In [63]: frame2['state']
Out[63]:
one onio
two onio
three linux
four hp-ux
five red-hat
Name: state, dtype: object

列可以通过赋值的方式进行修改,比如可以空的'debt'列赋值:

In [73]: frame2
Out[73]:
year state pop debt
one 2000 onio 1.5 NaN
two 2001 onio 1.7 NaN
three 2002 linux 3.6 NaN
four 2001 hp-ux 2.4 NaN
five 2002 red-hat 2.9 NaN In [74]: frame2['debt']=16.5 In [75]: frame2
Out[75]:
year state pop debt
one 2000 onio 1.5 16.5
two 2001 onio 1.7 16.5
three 2002 linux 3.6 16.5
four 2001 hp-ux 2.4 16.5
five 2002 red-hat 2.9 16.5

将列表或者数组赋值给某个列时,其长度必须跟DataFrame的长度向匹配。如果赋值的是一个Series,就会精确匹配DataFrame的索引,所有的空位都将会填上缺失值:

In [76]: val=Series([-1.2,-1.3,-1.4],index=['two','four','five'])

In [77]: frame2['debt']=val

In [78]: frame2
Out[78]:
year state pop debt
one 2000 onio 1.5 NaN
two 2001 onio 1.7 -1.2
three 2002 linux 3.6 NaN
four 2001 hp-ux 2.4 -1.3
five 2002 red-hat 2.9 -1.4

为不存在的列赋值,会创建出一个新列,关键字del可以删除列:

In [79]: frame2['estarn']=frame2['state']=='onio'

In [80]: frame2
Out[80]:
year state pop debt estarn
one 2000 onio 1.5 NaN True
two 2001 onio 1.7 -1.2 True
three 2002 linux 3.6 NaN False
four 2001 hp-ux 2.4 -1.3 False
five 2002 red-hat 2.9 -1.4 False In [81]: del frame2['estarn'] In [82]: frame2
Out[82]:
year state pop debt
one 2000 onio 1.5 NaN
two 2001 onio 1.7 -1.2
three 2002 linux 3.6 NaN
four 2001 hp-ux 2.4 -1.3
five 2002 red-hat 2.9 -1.4

另一种常见的数据形式那就是嵌套字典(也就是字典的字典)

In [85]: pop={'Nevda':{2001:2.4,2002:2.9},'Ohio':{2000:1.5,2001:1.7,2002:3.6}}

In [87]: frame3=DataFrame(pop)

In [88]: frame3
Out[88]:
Nevda Ohio
2000 NaN 1.5
2001 2.4 1.7
2002 2.9 3.6

它被解释为:外层字典的键作为列,内层键作为行索引.

当然也可以对结果进行转置:

In [89]: frame3.T
Out[89]:
2000 2001 2002
Nevda NaN 2.4 2.9
Ohio 1.5 1.7 3.6

pandas入门学习--------------------------(一)的更多相关文章

  1. pandas入门学习

    索引对象 pandas的索引对象负责管理轴标签和其他元数据(比如轴名称等).构建series或DataFrame时,所用到的任何数组或其他序列的标签都会转换成一个index: In [1]: impo ...

  2. pandas库学习笔记(二)DataFrame入门学习

    Pandas基本介绍——DataFrame入门学习 前篇文章中,小生初步介绍pandas库中的Series结构的创建与运算,今天小生继续“死磕自己”为大家介绍pandas库的另一种最为常见的数据结构D ...

  3. Python 数据处理库 pandas 入门教程

    Python 数据处理库 pandas 入门教程2018/04/17 · 工具与框架 · Pandas, Python 原文出处: 强波的技术博客 pandas是一个Python语言的软件包,在我们使 ...

  4. 利用python进行数据分析之pandas入门

    转自https://zhuanlan.zhihu.com/p/26100976 目录: 5.1 pandas 的数据结构介绍5.1.1 Series5.1.2 DataFrame5.1.3索引对象5. ...

  5. vue入门学习(基础篇)

    vue入门学习总结: vue的一个组件包括三部分:template.style.script. vue的数据在data中定义使用. 数据渲染指令:v-text.v-html.{{}}. 隐藏未编译的标 ...

  6. Hadoop入门学习笔记---part4

    紧接着<Hadoop入门学习笔记---part3>中的继续了解如何用java在程序中操作HDFS. 众所周知,对文件的操作无非是创建,查看,下载,删除.下面我们就开始应用java程序进行操 ...

  7. Hadoop入门学习笔记---part3

    2015年元旦,好好学习,天天向上.良好的开端是成功的一半,任何学习都不能中断,只有坚持才会出结果.继续学习Hadoop.冰冻三尺,非一日之寒! 经过Hadoop的伪分布集群环境的搭建,基本对Hado ...

  8. PyQt4入门学习笔记(三)

    # PyQt4入门学习笔记(三) PyQt4内的布局 布局方式是我们控制我们的GUI页面内各个控件的排放位置的.我们可以通过两种基本方式来控制: 1.绝对位置 2.layout类 绝对位置 这种方式要 ...

  9. PyQt4入门学习笔记(一)

    PyQt4入门学习笔记(一) 一直没有找到什么好的pyqt4的教程,偶然在google上搜到一篇不错的入门文档,翻译过来,留以后再复习. 原始链接如下: http://zetcode.com/gui/ ...

随机推荐

  1. linux命令-xz

    tar.xz文件如何压缩解压xz是绝大数linux默认就带的一个压缩工具,压缩率很高. xz压缩文件方法 默认压缩等级是6.要设置压缩率加入参数 -0 到 -9调节压缩率. xz -z [文件名] 不 ...

  2. Django model.py表单设置默认值允许为空

    blank=True 默认值为blank=Flase,表示默认不允许为空, blank=True admin级别可以为空   null=True 默认值为null=Flase,表示默认不允许为空 nu ...

  3. Mac安装最新tensorflow遇到的坑,记录下方便后人

    之前其他mac电脑安装tensorflow时候一切顺利,一行命令sudo pip install tensorflow就高搞定了,但是今天在新mac上安装tensorflow时候出现了一个bug,搞了 ...

  4. 从BZOJ2242看数论基础算法:快速幂,gcd,exgcd,BSGS

    LINK 其实就是三个板子 1.快速幂 快速幂,通过把指数转化成二进制位来优化幂运算,基础知识 2.gcd和exgcd gcd就是所谓的辗转相除法,在这里用取模的形式体现出来 \(gcd(a,b)\) ...

  5. 禁止别人用QQ号搜索到你,同时告诉你如何破解

    禁止他人用QQ号搜索到我们 举例说明:现在查找自己的QQ号,是可以通过搜索查找到的. 怎么禁止别人搜索到我们呢? 1.打开QQ面板,点击我们的头像. 2.在我们的昵称旁边,有一个小的按钮,点击它可以更 ...

  6. 《DSP using MATLAB》示例Example 8.22

    代码: %% ------------------------------------------------------------------------ %% Output Info about ...

  7. Makefile常用知识点

    格式 目标:最终要去生成的文件, 定格写,后面是冒号(冒号后面是依赖) 依赖:用来生成目标的源材料 命令:加工的方法,命令前面一定是Tab, make的过程就是使用命令将依赖加工成目标的过程 工作原理 ...

  8. saas 系统租户自助网站

    1. 原理       类似github 的自定义页面,使用jekyll 进行租户自助网站的生成,系统使用jenkins 进行租户的网站构建    同时结合租户的个性化域名系统,进行租户页面的发布管理 ...

  9. FastAdmin 无刷新地址改变

    FastAdmin 无刷新地址改变 群里有人问 FastAdmin 是不是用了 pjax? 之前有看到 Karson 回复过,其实 FastAdmin 用的是 HTML5 的一个History API ...

  10. 【转】理解 pkg-config 工具

    原文网址:http://www.chenjunlu.com/2011/03/understanding-pkg-config-tool/ 你在 Unix 或 Linux 下开发过软件吗?写完一个程序, ...