python3 科学计算_python3 科学计算之pandas入门(三)
一.函数应用和映射
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入门(三)相关推荐
- python3 科学计算_python3 科学计算之pandas入门(一)
数据帧(DataFrame)的功能特点: 潜在的列是不同的类型 大小可变 标记轴(行和列) 可以对行和列执行算术运算 四.各个数据结构示例 1.Series 1)创建Series import pan ...
- 量子计算时代更近了,未来可解决大规模计算的科学难题
来源:人民日报 摘要:借助量子计算的并行性带来指数级的加速,将能远远超越现有经典计算机的速度.当量子计算时代到来时,利用GHz时钟频率的量子计算机求解一个亿亿亿变量的线性方程组,将只需要10秒钟. 5 ...
- networkx 中心势计算_科学网—复杂网络分析库NetworkX学习笔记(2):统计指标计算 - 闫小勇的博文...
无论是实际网络还是对模型网络进行分析,都离不开对网络拓扑统计指标的计算.反映网络结构与动力学特性的统计指标有很多,Costa等的Characterization of Complex Networks ...
- 科学计算机的用途,计算机最主要的用途之一就是科学计算,科学计算可分为两类...
人工智能是在计算机科学.控制论.信息论.心理学.语言学等多种学科相互渗透的基础发展起来的一门新兴边缘学科,主要研究是用机器(主要是计算机)来模仿和实现人类的智能行为,经过几十年的发展,人工智能应用在不 ...
- 用计算解决科学难题,用算法让生活变得更好
2021-11-24,CSDN组织了<新程序员>的读者福利活动"走进名企"--探访北京微软亚洲研究院. 总体感受,科技的确是这个时代的第一生产力,整个下午的游学探访,体 ...
- 陆军计算机ip等级,作战计算是科学不是技能,重点领域发布!
原标题:作战计算是科学不是技能,重点领域发布! 本文来源:桌面战争 作战计算是基础学科,是部队精确化指挥筹划能力跃升的基础和前提,作战计算是科学而不仅仅是技能,应该有专业实验人员研究之后,再在部队推广 ...
- java 线性计算器_java版科学计算器,支持表达式计算
<java版科学计算器,支持表达式计算>由会员分享,可在线阅读,更多相关<java版科学计算器,支持表达式计算(12页珍藏版)>请在人人文库网上搜索. 1.程序设计综合设计题目 ...
- 什么是科学计算机可视化,科学计算可视化
作科学计算可视化(visualization in scientific computation;ViSC) [编辑] 什么是科学计算可视化 科学计算可视化也称为可视化,其定义为:"可视化是 ...
- 【直播】耿远昊:Pandas入门讲解(安泰第四届数据科学训练营)
Pandas入门讲解 直播信息 主讲人:耿远昊,Datawhale成员,joyful-pandas作者. 直播时间:2021年04月07日 20:00~21:00 直播内容: 时间序列中的必知必会: ...
最新文章
- 不止Markov决策过程,全景式分析强化学习研究内容
- Windows2008管理---第14章 高可用群集和QoS
- 【今日CS 视觉论文速览】11 Dec 2018
- 发布:偶写的NHibernate代码生成器
- Portlet MVC框架
- GPS从入门到放弃(十三) --- 接收机自主完好性监测(RAIM)
- C++实现模板方法模式--问卷调查实战
- c语言变量类型char,C语言中char变量详解
- 网络攻击与防范—术语和工具介绍
- 完全二叉树的顺序存储与非递归算法前序遍历
- w ndows10装什么浏览器,Windows10系统默认启用IE浏览器方法
- codecombat 代码攻略
- java 谷歌地图_如何使用java在浏览器上显示谷歌地图?
- vim 变成只读了_VIM以只读方式打开文件
- linux tty字体,ArchLinux TTY 中文字体渲染
- 6、Linux多进程开发
- linux ftdi 虚拟,linux ftdi 驱动
- A Byte of Python3 学习笔记
- 计算机二进制转化教案及ppt,计算机《数制与编码-进制转换》公开课教案.doc
- 杀毒软件也分少林和武当