Pandas有两个主要的数据结构:Series和DataFrame.

Series是一种类似于一维数组的对象,它由一组数据以及一组与之相关的数据标签构成.来看下它的使用过程

In [1]: from pandas import Series,DataFrame

In [2]: import pandas as pd

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

In [5]: obj

Out[5]:

0    4

1    7

2   -5

3    3

dtype: int64

通过Series生成的对象左边是索引,右边是具体的值.如果我们没有指定索引,那么会默认的生成一个.可以通过values和index来查看对应的值和索引.

In [6]: obj.values

Out[6]: array([ 4,  7, -5,  3])

In [7]: obj.index

Out[7]: RangeIndex(start=0, stop=4, step=1)

如果我们想指示索引,可以在生成的时候通过index来指示对应的索引

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

In [9]: obj2

Out[9]:

a    4

b    7

c   -5

d    3

dtype: int64

通过对应的索引就可以访问对应的值

In [10]: obj2['a']

Out[10]: 4

通过numpy数组运算后的结果也会保留索引和值之间的链接:

In [12]: np.exp(obj2)

Out[12]:

a      54.598150

b    1096.633158

c       0.006738

d      20.085537

dtype: float64

如果数据存在字典中,那么也可以通过这个字典来创建Series.创建之后索引就是字典中的key值.

In [13]: data={'name':'zhf','age':33,'city':'chengdu'}

In [14]: obj3=Series(data)

In [15]: obj3

Out[15]:

age          33

city    chengdu

name        zhf

dtype: object

DataFrame:

DataFrame是一个表格形的数据结构.DataFrame既有行索引也有列索引,可以被看作是Series组成的字典.

In [25]: data={'city':['chongqing','chengdu','beijing'],'weather':['rainy','suns

...: haw','snow'],'temperature':[9,5,-3]}

In [26]: frame=DataFrame(data)

In [27]: frame

Out[27]:

city  temperature  weather

0  chongqing            9    rainy

1    chengdu            5  sunshaw

2    beijing           -3     snow

但是生成的数据的列索引和我们初始化data的时候不一样,如果我们想按照初始化data的索引顺序来生成的话就要在DataFrame中指定columns

In [28]: frame=DataFrame(data,columns=['city','weather','temperature'])

In [29]: frame

Out[29]:

city  weather  temperature

0  chongqing    rainy            9

1    chengdu  sunshaw            5

2    beijing     snow           -3

同样的也可以指示行索引的值

In [30]: frame=DataFrame(data,columns=['city','weather','temperature'],index=['f

...: irst','second','third'])

In [31]: frame

Out[31]:

city  weather  temperature

first   chongqing    rainy            9

second    chengdu  sunshaw            5

third     beijing     snow           -3

有了索引后就可以通过索引访问对应的行和列的数据.

通过列索引访问

In [33]: frame.city

Out[33]:

first     chongqing

second      chengdu

third       beijing

Name: city, dtype: object

通过行索引访问

In [41]: frame.loc['first']

Out[41]:

city           chongqing

weather            rainy

temperature            9

Name: first, dtype: object

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

这种格式的生成外层字典的键作为列,内层键则作为行索引

In [42]: pop={'cost':{2016:3000,2017:3400,2018:5000},'need':{2017:4000,2018:6000

...: }}

In [43]: frame3=DataFrame(pop)

In [44]: frame3

Out[44]:

cost    need

2016  3000     NaN

2017  3400  4000.0

2018  5000  6000.0

当然也可以转置

In [45]: frame3.T

Out[45]:

2016    2017    2018

cost  3000.0  3400.0  5000.0

need     NaN  4000.0  6000.0

基本功能:

一 重新索引

首先来看下之前生成的数据,返回一个index对象.然后通过index[1]=’a’的形式来修改

In [50]: obj.index

Out[50]: RangeIndex(start=0, stop=4, step=1)

In [51]: index=obj.index

In [52]: index[1]='a'

会提示如下的错误,Index does not support mutable operations.表示index对象是不可以修改的对象.因此无法通过这种方式进行修改

---------------------------------------------------------------------------

TypeError                                 Traceback (most recent call last)

<ipython-input-52-336c3a4c2807> in <module>()

----> 1 index[1]='a'

/usr/local/lib/python2.7/dist-packages/pandas/core/indexes/base.pyc in __setitem__(self, key, value)

1722

1723     def __setitem__(self, key, value):

-> 1724         raise TypeError("Index does not support mutable operations")

1725

1726     def __getitem__(self, key):

TypeError: Index does not support mutable operations

要想修改序列,只能通过obj.reindex的方法.

In [60]: obj.reindex(['a','b','c','d','e'])

二丢弃指定轴上的项

可以通过drop的方法来丢弃某个行上的数据,参数即是行索引

In [64]: obj

Out[64]:

1    4

2    7

3    5

4    3

dtype: int64

In [65]: new=obj.drop(1)

In [66]: new

Out[66]:

2    7

3    5

4    3

dtype: int64

三索引,选取和过滤

在python的列表和元组中,我们可以通过切片来得到我们想要的信息,同样的在pandas中也可以通过切片来得到信息.

In [67]: obj[2:4]

Out[67]:

3    5

4    3

dtype: int64

对于之前的嵌套字典,也可以通过切片的方式进行访问.

In [81]: frame

Out[81]:

city  weather  temperature

first   chongqing    rainy            9

second    chengdu  sunshaw            5

third     beijing     snow           -3

In [82]: frame[0:1]

Out[82]:

city weather  temperature

first  chongqing   rainy            9

或者是通过ix来访问单个的行

In [83]: frame.ix[1]

Out[83]:

city           chengdu

weather        sunshaw

temperature          5

Name: second, dtype: object

三 算术运算和数据对齐

在对象进行相加的时候,如果存在不同的索引对,则结果的索引就是该索引的并集.如下面2个数据,只有一个索引’a’是能够对应得上的.因此相加后只有索引a才有结果其他都是空值

In [84]: s1=Series([1,2,3,4],index=['a','b','c','d'])

In [85]: s2=Series([5,6,7,8],index=['x','a','y','z'])

In [86]: s1+s2

Out[86]:

a    7.0

b    NaN

c    NaN

d    NaN

x    NaN

y    NaN

z    NaN

dtype: float64

四 在算术方法中填充值

前面介绍到如果相加后没有相同的索引值,那么对应的值就会被填充为NaN,如果我们期望填充某个固定的值比如0的话该如何操作呢,可以使用s1.add(s2,fill_value=0)的方式,这样的话就可以呈现出0而不是NaN

五 DataFrame和Series之间的运算

来看一个具体的例子

In [111]: frame=DataFrame(np.arange(12).reshape((4,3)),columns=list('bde'),index

...: =['a1','a2','a3','a4'])

In [119]: series=frame.ix[0]

In [120]: series

Out[120]:

b    0

d    1

e    2

Name: a1, dtype: int64

DataFrame和Series之间的算术运算会将Series的索引匹配到DataFrame的列,然后进行相减

In [122]: frame

Out[122]:

b   d   e

a1  0   1   2

a2  3   4   5

a3  6   7   8

a4  9  10  11

In [123]: frame-series

Out[123]:

b  d  e

a1  0  0  0

a2  3  3  3

a3  6  6  6

a4  9  9  9

六 排序和排名

要对行或者列索引进行排序,可使用sort_index的方法,它将返回一个已排序的新对象

In [133]: frame

Out[133]:

e   c   d

a3  0   1   2

a2  3   4   5

a0  6   7   8

a1  9  10  11

对行索引进行排序

In [134]: frame.sort_index()

Out[134]:

e   c   d

a0  6   7   8

a1  9  10  11

a2  3   4   5

a3  0   1   2

对列索引进行排序

In [135]: frame.sort_index(axis=1)

Out[135]:

c   d  e

a3   1   2  0

a2   4   5  3

a0   7   8  6

a1  10  11  9

如果要对具体某一列的的数据进行排序的话可以采用传入参数by的方式.这里sort_index和sort_values都是一样的效果.

In [139]: frame.sort_values(by='d')

Out[139]:

e   c   d

a3  0   1   2

a2  3   4   5

a0  6   7   8

a1  9  10  11

python数据分析之Pandas:基本功能介绍的更多相关文章

  1. Python数据分析之pandas基本数据结构:Series、DataFrame

    1引言 本文总结Pandas中两种常用的数据类型: (1)Series是一种一维的带标签数组对象. (2)DataFrame,二维,Series容器 2 Series数组 2.1 Series数组构成 ...

  2. Python数据分析库pandas基本操作

    Python数据分析库pandas基本操作2017年02月20日 17:09:06 birdlove1987 阅读数:22631 标签: python 数据分析 pandas 更多 个人分类: Pyt ...

  3. Python 数据分析:Pandas 缺省值的判断

    Python 数据分析:Pandas 缺省值的判断 背景 我们从数据库中取出数据存入 Pandas None 转换成 NaN 或 NaT.但是,我们将 Pandas 数据写入数据库时又需要转换成 No ...

  4. Python数据分析之pandas学习

    Python中的pandas模块进行数据分析. 接下来pandas介绍中将学习到如下8块内容:1.数据结构简介:DataFrame和Series2.数据索引index3.利用pandas查询数据4.利 ...

  5. python数据分析之pandas数据选取:df[] df.loc[] df.iloc[] df.ix[] df.at[] df.iat[]

    1 引言 Pandas是作为Python数据分析著名的工具包,提供了多种数据选取的方法,方便实用.本文主要介绍Pandas的几种数据选取的方法. Pandas中,数据主要保存为Dataframe和Se ...

  6. Python数据分析之pandas

    Python中的pandas模块进行数据分析. 接下来pandas介绍中将学习到如下8块内容:1.数据结构简介:DataFrame和Series2.数据索引index3.利用pandas查询数据4.利 ...

  7. Python数据分析之Pandas操作大全

    从头到尾都是手码的,文中的所有示例也都是在Pycharm中运行过的,自己整理笔记的最大好处在于可以按照自己的思路来构建矿建,等到将来在需要的时候能够以最快的速度看懂并应用=_= 注:为方便表述,本章设 ...

  8. python数据分析之pandas库的Series应用

    一.pandas的数据结构介绍 1. Series 1.1 Series是由一种类似于一维数组的对象,它由一组数据以及一组与之相关的数据索引构成.仅由一组数据可产生最简单的Series. from p ...

  9. python数据分析工具——Pandas、StatsModels、Scikit-Learn

    Pandas Pandas是 Python下最强大的数据分析和探索工具.它包含高级的数据结构和精巧的工具,使得在 Python中处理数据非常快速和简单. Pandas构建在 Numpy之上,它使得以 ...

  10. 第11.13节 Python正则表达式的转义符”\”功能介绍

    为了支持特殊元字符在特定场景下能表示自身而不会被当成元字符进行匹配出来,可以通过字符集或转义符表示方法来表示,字符集表示方法前面在<第11.4节 Python正则表达式搜索字符集匹配功能及元字符 ...

随机推荐

  1. POJ 2128:Highways

    Highways Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 2730   Accepted: 1008   Specia ...

  2. MFC中的CDC详细教程

    参考:  MFC中的CDC详细教程1,2,3 StretchDIBits用法

  3. 【温故知新】——CSS黑魔法小技巧可以少些不必要的js

    前言:这篇文章是转载[前端开发博客]的一篇技术文章,并非本人所写.只是个人觉得很实用,所以分享给大家.原文链接:github.com 1.利用 CSS 的 content 属性 attr 抓取资料需求 ...

  4. Scala 中Array,List,Tuple的差别

    尽管学了一段时间的Scala了,可是总认为基础不是太扎实,还有非常多的基础知识比較模糊.于是近期又打算又一次学习基础. Scala中的三种集合类型包含:Array,List,Tuple.那么究竟这三种 ...

  5. MAC - 命令行中用sublime打开指定文件,使用ln命令建立软链接

    眼下sublime是mac下最好的文本编辑软件.常常要使用它打开一些文件,比如html,js,txt,json等文件,可是sublime2默认不支持在命令行下调用.经过研究发现能够用建立软连接的方式调 ...

  6. apue学习笔记(第八章 进程控制)

    本章介绍UNIX系统的进程控制,包括创建新进程.执行程序和进程终止. 进程标识 每一个进程都有一个非负整数表示的唯一进程ID,除了进程ID,每个进程还有一些其他标识符.下列函数返回这些标识符 #inc ...

  7. jquery实现图片的依次加载图片

    css代码: ul#portfolio{margin:0;padding:0;} ul#portfolio li{float:left;margin:0 5px 0 0;width:250px;hei ...

  8. select设置innerHMTL

    select控件在标准浏览器下可以直接innerHTML设置内容,IE则不行. HTML结构: <form name="form1"> <select name= ...

  9. Orcad CIS怎么批量修改字体大小

    选中DSN,右键,design properties, schematic design,选择design properties.

  10. 33:字符统计SumOfCharactors

    题目描述:如果统计的个数相同,则按照ASII码由小到大排序输出 .如果有其他字符,则对这些字符不用进行统计. 实现以下接口: 输入一个字符串,对字符中的各个英文字符,数字,空格进行统计(可反复调用) ...