一.函数应用和映射

Numpy的ufuncs(元素级数组方法)也可以用于操作pandas对象:

In [48]: frame=DataFrame(np.random.randn(4,3),columns=list('bde'),index=['UT','

...: FL','CA','NY'])

In [49]: frame

Out[49]:

b               d             e

UT -0.330550 -0.916072 -0.378030

FL 0.920420 -0.205706 0.282776

CA 1.200623 -0.013773 1.063237

NY 0.219615 -1.088477 0.752375

In [50]: np.abs(frame)

Out[50]:

b            d             e

UT 0.330550 0.916072 0.378030

FL 0.920420 0.205706 0.282776

CA 1.200623 0.013773 1.063237

NY 0.219615 1.088477 0.752375

另一个常见的操作是,将函数应用到有各列或行所形成的一维数组上。DataFrame的apply方法即可实现此功能:

In [51]: f=lambda x:x.max()-x.min()

In [52]: frame.apply(f)      #各列上的最大值减去最小值所形成的一维数组

Out[52]:

b 1.531173

d 1.074703

e 1.441267

dtype: float64

In [53]: frame.apply(f,axis=1)  #各行上的最大值减去最小值所形成的一维数组

Out[53]:

UT 0.585522

FL 1.126126

CA 1.214396

NY 1.840852

dtype: float64

许多最为常见的数组统计功能都被实现承DataFrame的方法(如sum和mean),因此无需使用apply方法。

除标量值外,传递给apply的函数还可以返回由多个值组成的Series:

In [54]: def f(x):

...: return Series([x.min(),x.max()],index=['min','max'])

In [55]: frame.apply(f)

Out[55]:

b              d              e

min    -0.330550 -1.088477 -0.378030

max   1.200623  -0.013773  1.063237

此外,元素级的Python函数也是可以用的。假如你想得到frame中各个浮点值的格式化字符串,使用applymap即可:

In [56]: format=lambda x:'%.2f'%x

In [57]: frame.applymap(format)

Out[57]:

b      d       e

UT -0.33 -0.92 -0.38

FL 0.92 -0.21 0.28

CA 1.20 -0.01 1.06

NY 0.22 -1.09 0.75

之所以叫做applymap,是因为Series有一个由于应用元素级函数的map方法:

In [58]: frame['e'].map(format)

Out[58]:

UT -0.38

FL 0.28

CA 1.06

NY 0.75

Name: e, dtype: object

二.排序和排名

根据条件对数据集排序(sorting)也是一种重要的内置运算。要对行或列索引进行排序(按字典排序),可使用sort_index方法,它将返回一个已排序的新对象:

In [59]: obj=Series(range(4),index=['d','a','b','c'])

In [60]: obj.sort_index()

Out[60]:

a 1

b 2

c 3

d 0

dtype: int64

而对于DataFrame,则可以根据任意一个轴上的索引进行排序:

In [61]: frame=DataFrame(np.arange(8).reshape((2,4)),index=['three','one'],colu

...: mns=['d','a','b','c'])

In [62]: frame.sort_index()   #索引行排序

Out[62]:

d a b c

one 4 5 6 7

three 0 1 2 3

In [63]: frame.sort_index(axis=1) #索引列排序

Out[63]:

a b c d

three 1 2 3 0

one 5 6 7 4

数据默认是按升序排序的,但也可以降序排序:

In [64]: frame.sort_index(axis=1,ascending=False)

Out[64]:

d c b a

three 0 3 2 1

one   4 7 6 5

若要按值对Series进行排序,可使用sort_values方法:

In [68]: obj.sort_values()  #默认升序

Out[68]:

2 -1

3 3

0 4

1 8

dtype: int64

In [69]: obj.sort_values(ascending=False)  #设置降序

Out[69]:

1 8

0 4

3 3

2 -1

dtype: int64

在排序时,任何缺失值都默认都会放到Series的末尾

In [70]: obj=Series([5,np.nan,9,np.nan,-8,1])

In [71]: obj.sort_values()

Out[71]:

4 -8.0

5 1.0

0 5.0

2 9.0

1 NaN

3 NaN

dtype: float64

在DataFrame上,你可能希望根据一个或多个列中的值进行排序。将一个或多个列的名字传递给by选项即可达到该目的:

In [75]: frame.sort_values(by='b')

Out[75]:

b a

2 -6 1

3 1 0

0 5 1

1 8 0

要根据多个列进行排序,传入名称的列表即可:

In [76]: frame.sort_values(by=['a','b'])

Out[76]:

b a

3 1 0

1 8 0

2 -6 1

0 5 1

排名(ranking)跟排序关系密切,且它会增设一个排名值(从1开始,一直到数组中有效数据的数量)。它跟numpy.argsort产生的间接排序索引差不多,只不过它可以根据某种规则破坏平级关系。接下来介绍Series和DataFrame的rank方法。默认情况下,rank是通过"为各组分配一个平均排名"的方式破坏平级关系的:

In [77]: obj=Series([7,-6,7,8,3,0,8])

In [78]: obj.rank()

Out[78]:

0 4.5

1 1.0

2 4.5

3 6.5

4 3.0

5 2.0

6 6.5

dtype: float64

也可以根据值在原数据中出现的顺序给出排名

In [79]: obj.rank(method='first')

Out[79]:

0 4.0

1 1.0

2 5.0

3 6.0

4 3.0

5 2.0

6 7.0

dtype: float64

当然,我们也可以按降序进行排名:

In [80]: obj.rank(method='first',ascending=False)

Out[80]:

0 3.0

1 7.0

2 4.0

3 1.0

4 5.0

5 6.0

6 2.0

dtype: float64

DataFrame可以在行或列上计算排名:

In [81]: frame=DataFrame({'b':[6.5,8,-4,2],'a':[0,1,0,1],'c':[-2,8,9,-3.5]})

In [82]: frame

Out[82]:

b  a  c

0 6.5 0 -2.0

1 8.0 1 8.0

2 -4.0 0 9.0

3 2.0 1 -3.5

In [83]: frame.rank(axis=0)  #行上计算排名

Out[83]:

b    a   c

0 3.0 1.5 2.0

1 4.0 3.5 3.0

2 1.0 1.5 4.0

3 2.0 3.5 1.0

In [84]: frame.rank(axis=1)  #列上计算排名

Out[84]:

b   a     c

0 3.0 2.0 1.0

1 2.5 1.0 2.5

2 1.0 2.0 3.0

3 3.0 2.0 1.0

下表:排名时用于破坏平级关系的method选项

method                       说明

average                 默认:在相等分组中,为各个值分配平均排名

min                        使用整个分组的最小排名

max                       使用整个分组的最大排名

first                        按值在原始数据中的出现顺序分配排名

三.带有重复值的轴索引

直到目前为止,我们所介绍的所有范例都有着唯一的轴标签(索引值).虽然许多pandas函数(如reindex)都要求标签唯一,但这并不是强制性的,我们来看看下面这个简单的带有重复索引值的Series:

In [85]: obj=Series(range(5),index=['a','a','b','b','c'])

In [86]: obj

Out[86]:

a 0

a 1

b 2

b 3

c 4

dtype: int64

索引的is_unique属性可以告诉我们它的值是否是唯一的:

In [87]: obj.index.is_unique

Out[87]: False

对于带有重复值的索引,数据选取的行为将会有些不同。如果某个索引对应多个值,则返回一个Series,而对应单个值的,则返回一个标量值.

In [88]: obj['a']

Out[88]:

a 0

a 1

dtype: int64

In [89]: obj['c']

Out[89]: 4

对DataFrame的行进行索引时也是如此:

In [90]: df=DataFrame(np.random.randn(4,3),index=['a','a','b','b'])

In [91]: df

Out[91]:

0               1               2

a -0.371706 -0.803473 0.438422

a -1.800892 -1.633910 0.643961

b -0.234814 0.713589 -0.681091

b 0.828878 -1.429612 0.538089

In [95]: df.loc['a']

Out[95]:

0 1 2

a -0.371706 -0.803473 0.438422

a -1.800892 -1.633910 0.643961

python3 科学计算_python3 科学计算之pandas入门(三)相关推荐

  1. python3 科学计算_python3 科学计算之pandas入门(一)

    数据帧(DataFrame)的功能特点: 潜在的列是不同的类型 大小可变 标记轴(行和列) 可以对行和列执行算术运算 四.各个数据结构示例 1.Series 1)创建Series import pan ...

  2. 量子计算时代更近了,未来可解决大规模计算的科学难题

    来源:人民日报 摘要:借助量子计算的并行性带来指数级的加速,将能远远超越现有经典计算机的速度.当量子计算时代到来时,利用GHz时钟频率的量子计算机求解一个亿亿亿变量的线性方程组,将只需要10秒钟. 5 ...

  3. networkx 中心势计算_科学网—复杂网络分析库NetworkX学习笔记(2):统计指标计算 - 闫小勇的博文...

    无论是实际网络还是对模型网络进行分析,都离不开对网络拓扑统计指标的计算.反映网络结构与动力学特性的统计指标有很多,Costa等的Characterization of Complex Networks ...

  4. 科学计算机的用途,计算机最主要的用途之一就是科学计算,科学计算可分为两类...

    人工智能是在计算机科学.控制论.信息论.心理学.语言学等多种学科相互渗透的基础发展起来的一门新兴边缘学科,主要研究是用机器(主要是计算机)来模仿和实现人类的智能行为,经过几十年的发展,人工智能应用在不 ...

  5. 用计算解决科学难题,用算法让生活变得更好

    2021-11-24,CSDN组织了<新程序员>的读者福利活动"走进名企"--探访北京微软亚洲研究院. 总体感受,科技的确是这个时代的第一生产力,整个下午的游学探访,体 ...

  6. 陆军计算机ip等级,作战计算是科学不是技能,重点领域发布!

    原标题:作战计算是科学不是技能,重点领域发布! 本文来源:桌面战争 作战计算是基础学科,是部队精确化指挥筹划能力跃升的基础和前提,作战计算是科学而不仅仅是技能,应该有专业实验人员研究之后,再在部队推广 ...

  7. java 线性计算器_java版科学计算器,支持表达式计算

    <java版科学计算器,支持表达式计算>由会员分享,可在线阅读,更多相关<java版科学计算器,支持表达式计算(12页珍藏版)>请在人人文库网上搜索. 1.程序设计综合设计题目 ...

  8. 什么是科学计算机可视化,科学计算可视化

    作科学计算可视化(visualization in scientific computation;ViSC) [编辑] 什么是科学计算可视化 科学计算可视化也称为可视化,其定义为:"可视化是 ...

  9. 【直播】耿远昊:Pandas入门讲解(安泰第四届数据科学训练营)

    Pandas入门讲解 直播信息 主讲人:耿远昊,Datawhale成员,joyful-pandas作者. 直播时间:2021年04月07日 20:00~21:00 直播内容: 时间序列中的必知必会: ...

最新文章

  1. 不止Markov决策过程,全景式分析强化学习研究内容
  2. Windows2008管理---第14章 高可用群集和QoS
  3. 【今日CS 视觉论文速览】11 Dec 2018
  4. 发布:偶写的NHibernate代码生成器
  5. Portlet MVC框架
  6. GPS从入门到放弃(十三) --- 接收机自主完好性监测(RAIM)
  7. C++实现模板方法模式--问卷调查实战
  8. c语言变量类型char,C语言中char变量详解
  9. 网络攻击与防范—术语和工具介绍
  10. 完全二叉树的顺序存储与非递归算法前序遍历
  11. w ndows10装什么浏览器,Windows10系统默认启用IE浏览器方法
  12. codecombat 代码攻略
  13. java 谷歌地图_如何使用java在浏览器上显示谷歌地图?
  14. vim 变成只读了_VIM以只读方式打开文件
  15. linux tty字体,ArchLinux TTY 中文字体渲染
  16. 6、Linux多进程开发
  17. linux ftdi 虚拟,linux ftdi 驱动
  18. A Byte of Python3 学习笔记
  19. 计算机二进制转化教案及ppt,计算机《数制与编码-进制转换》公开课教案.doc
  20. 杀毒软件也分少林和武当

热门文章

  1. win10无线信号强度测试软件,如何在Win10 1909上确定Wi-Fi信号强度
  2. aspectj框架切入点表达式
  3. 关于Android SD卡
  4. ffmpeg图片+音频合成视频
  5. c语言控制输出间隔大小,C/C++ 输出间隔控制
  6. 忍者必须死3系统拆解+测评
  7. LoRa模块无线通信技术在距离测量和定位上的应用——东胜物联
  8. 2022年CISP证书有啥用
  9. 程序员面试官何苦为难程序员!
  10. 并发编程合集(1)上下文切换详解、死锁及解决方案详解