Pandas继承了Numpy的运算功能,可以快速对每个元素进行运算,即包括基本运算(加减乘除等),也包括复杂运算(三角函数、指数函数和对数函数等)。

通用函数使用

apply和applymap

apply(func,axis=0,broadcast=None,raw=False,reduce=None,result_type=None,args=(),**kwds,)

applymap(func)
In [4]: frame = pd.DataFrame(np.random.randn(4,3),columns=list('bde'),
index=['Utah','Ohio','Texas','Oregon']) In [5]: frame
Out[5]:
b d e
Utah 0.471961 -0.399978 -0.874515
Ohio -0.975614 -0.521370 -0.760090
Texas -1.117619 -1.179684 -1.067536
Oregon 0.874380 -1.233453 -1.165621 #创建一个匿名函数:最大值-最小值
In [7]: f = lambda x: x.max()-x.min() # 默认axis = 0
In [8]: frame.apply(f)
Out[8]:
b 1.991999
d 0.833475
e 0.405531
dtype: float64 In [9]: frame.apply(f,axis=1)
Out[9]:
Utah 1.346476
Ohio 0.454245
Texas 0.112147
Oregon 2.107833
dtype: float64 #定义一个提取最小值和最大值的函数
In [10]: def f(x):
...: return pd.Series([x.min(),x.max()],index=['min','max']) In [11]: frame.apply(f)
Out[11]:
b d e
min -1.117619 -1.233453 -1.165621
max 0.874380 -0.399978 -0.760090 In [12]: format = lambda x : '%.2f'%x In [13]: frame.applymap(format)
Out[13]:
b d e
Utah 0.47 -0.40 -0.87
Ohio -0.98 -0.52 -0.76
Texas -1.12 -1.18 -1.07
Oregon 0.87 -1.23 -1.17 In [14]: frame['e'].map(format)
Out[14]:
Utah -0.87
Ohio -0.76
Texas -1.07
Oregon -1.17
Name: e, dtype: object

一元运算

Pandas在进行一元运算(函数等),输出的结果会保留索引和列标签。

Series

In [1]: import pandas as pd
In [2]: import numpy as np #确定一个随机种子
In [3]: rng = np.random.RandomState(42) In [4]: ser = pd.Series(rng.randint(0,10,4)) In [5]: ser
Out[5]:
0 6
1 3
2 7
3 4
dtype: int32 In [6]: np.exp(ser)
Out[6]:
0 403.428793
1 20.085537
2 1096.633158
3 54.598150
dtype: float64

DataFrame

In [7]: df = pd.DataFrame(rng.randint(0,10,(3,4)),columns=list('ABCD'))

In [8]: df
Out[8]:
A B C D
0 6 9 2 6
1 7 4 3 7
2 7 2 5 4 In [9]: np.sin(df*np.pi/4)
Out[9]:
A B C D
0 -1.000000 7.071068e-01 1.000000 -1.000000e+00
1 -0.707107 1.224647e-16 0.707107 -7.071068e-01
2 -0.707107 1.000000e+00 -0.707107 1.224647e-16

二元运算

进行二元运算时(如加法和减法等),Pandas会在计算过程中自动对齐两个对象的索引。在直接应用Python运算符时,在缺失位置会用NaN填充,这种方法是Python的内置集合运算规则;用Pandas方法(可设置填充值或填充方法)代替运算符,可以避免NaN产生。

Python运算符 Pandas方法
+ add(),radd()
- sub(),rsub()
* mul(),rmul()
/ div(),rdiv()
// floordiv(),rfloordiv()
% mod()
** pow(),rpow()

Series

In [10]: A = pd.Series([2,4,6],index=[0,1,2])

In [11]: B = pd.Series([1,3,5],index=[1,2,3])

#索引不匹配时以NaN填充
In [12]: A + B
Out[12]:
0 NaN
1 5.0
2 9.0
3 NaN
dtype: float64 In [13]: A.add(B)
Out[13]:
0 NaN
1 5.0
2 9.0
3 NaN
dtype: float64 #fill_value表示不匹配时缺失值以0填充后再运算
In [14]: A.add(B,fill_value=0)
Out[14]:
0 2.0
1 5.0
2 9.0
3 5.0
dtype: float64

DataFrame

In [15]: C = pd.DataFrame(rng.randint(0,20,(2,2)))
In [16]: D = pd.DataFrame(rng.randint(0,10,(3,3))) In [17]: C
Out[17]:
0 1
0 1 11
1 5 1 In [18]: D
Out[18]:
0 1 2
0 4 0 9
1 5 8 0
2 9 2 6 In [19]: C.columns = list('AB') In [20]: C
Out[20]:
A B
0 1 11
1 5 1 In [21]: D.columns = list('ABC') In [21]: D
Out[21]:
A B C
0 4 0 9
1 5 8 0
2 9 2 6 #索引不匹配时以NaN填充
In [23]: C + D
Out[23]:
A B C
0 5.0 11.0 NaN
1 10.0 9.0 NaN
2 NaN NaN NaN In [24]: C.stack()
Out[24]:
0 A 1
B 11
1 A 5
B 1
dtype: int32 In [25]: fill = C.stack().mean() In [26]: fill
Out[26]: 4.5 #fill_value表示不匹配时缺失值以4.5填充后再运算
In [27]: C.add(D,fill_value=fill)
Out[27]:
A B C
0 5.0 11.0 13.5
1 10.0 9.0 4.5
2 13.5 6.5 10.5

Series与DataFrame的结合运算

Series与DataFrame结合运算,会根据Numpy的广播规则对Series进行处理后,再与DataFrame运算。

In [36]: A = rng.randint(10,size=(3,4))

In [37]: A
Out[37]:
array([[3, 8, 2, 4],
[2, 6, 4, 8],
[6, 1, 3, 8]]) In [38]: df = pd.DataFrame(A,columns = list('ABCD')) In [39]: ser = pd.Series(A[0],index=list('ABCD')) In [40]: df
Out[40]:
A B C D
0 3 8 2 4
1 2 6 4 8
2 6 1 3 8 In [41]: ser
Out[41]:
A 3
B 8
C 2
D 4
dtype: int32 #ser经过广播后变成3*4的数组,与df的3*4数组以列标签对齐进行运算
In [42]: df - ser
Out[42]:
A B C D
0 0 0 0 0
1 -1 -2 2 4
2 3 -7 1 4 In [43]: ser2 = df['B'] In [44]: ser2
Out[44]:
0 8
1 6
2 1
Name: B, dtype: int32 #ser2经过广播后变成3*4的数组,与df的3*4数组以行索引对齐进行运算
In [46]: df.subtract(ser2,axis=0)
Out[46]:
A B C D
0 -5 0 -6 -4
1 -4 0 -2 2
2 5 0 2 7

Pandas通用函数和运算的更多相关文章

  1. Pandas分组级运算和转换

    分组级运算和转换 假设要添加一列的各索引分组平均值 第一种方法 import pandas as pd from pandas import Series import numpy as np df ...

  2. pandas之聚合运算

    通过聚合运算可以得到我们比较感兴趣的数据以方便处理 import pandas as pd import numpy as np # 先创建一组数据表DataFrame df = pd.DataFra ...

  3. pandas | DataFrame基础运算以及空值填充

    本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是pandas数据处理专题的第四篇文章,我们一起来聊聊DataFrame中的索引. 上一篇文章当中我们介绍了DataFrame数据结构当 ...

  4. 数据分析工具Pandas

        参考学习资料:http://pandas.pydata.org 1.什么是Pandas? Pandas的名称来自于面板数据(panel data)和Python数据分析(data analys ...

  5. pandas数据对齐

    Pandas的对齐运算 是数据清洗的重要过程,可以按索引对齐进行运算,如果没对齐的位置则补NaN,最后也可以填充NaN Series的对齐运算 1. Series 按行.索引对齐 示例代码: s1 = ...

  6. Python之Pandas库常用函数大全(含注释)

    前言:本博文摘抄自中国慕课大学上的课程<Python数据分析与展示>,推荐刚入门的同学去学习,这是非常好的入门视频. 继续一个新的库,Pandas库.Pandas库围绕Series类型和D ...

  7. (数据科学学习手札69)详解pandas中的map、apply、applymap、groupby、agg

    *从本篇开始所有文章的数据和代码都已上传至我的github仓库:https://github.com/CNFeffery/DataScienceStudyNotes 一.简介 pandas提供了很多方 ...

  8. Python数据分析与展示[第三周](pandas数据类型操作)

    数据类型操作 如何改变Series/ DataFrame 对象 增加或重排:重新索引 删除:drop 重新索引 .reindex() reindex() 能够改变或重排Series和DataFrame ...

  9. Python for Data Analysis 学习心得(二) - pandas介绍

    一.pandas介绍 本篇程序上篇内容,在numpy下面继续介绍pandas,本书的作者是pandas的作者之一.pandas是非常好用的数据预处理工具,pandas下面有两个数据结构,分别为Seri ...

  10. 《利用python进行数据分析》读书笔记--第十一章 金融和经济数据应用(一)

    自2005年开始,python在金融行业中的应用越来越多,这主要得益于越来越成熟的函数库(NumPy和pandas)以及大量经验丰富的程序员.许多机构发现python不仅非常适合成为交互式的分析环境, ...

随机推荐

  1. com.fasterxml.jackson.databind.exc.InvalidDefinitionException

    @JsonIgnoreProperties 此注解是类注解,作用是json序列化时将Java bean中的一些属性忽略掉,序列化和反序列化都受影响. 写法将此标签加在model 类的类名上 ,可以多个 ...

  2. 【Azure 事件中心】Azure Event Hub中的数据能不能存储大于7天呢?如果7天之后是不是会自动删除呢?

    问题描述 Event Hub中有个retention的设置为7天,有没有办法增大这个Retention的时间? 如果没办法,是不是超过7天的数据就会被删除? 问题解答 因为Azure Event Hu ...

  3. 【Filament】立方体贴图(6张图)

    1 前言 ​ 本文通过一个立方体贴图的例子,讲解三维纹理贴图(子网格贴图)的应用,案例中使用 6 张不同的图片给立方体贴图,图片如下. ​ 读者如果对 Filament 不太熟悉,请回顾以下内容. F ...

  4. 从Python语言的角度看C++的指针

    技术背景 从一个Python Coder的角度来说,其实很羡慕C++里面指针类型的用法,即时指针这种用法有可能会给程序带来众多的不稳定因素(据C++老Coder所说).本文主要站在一个C++初学者的角 ...

  5. adb monkey 有哪些参数?

    adb monkey 是 Android Debug Bridge (ADB) 工具中的一个命令,用于执行随机事件来对 Android 应用进行压力测试.以下是 adb monkey 命令的一些常用参 ...

  6. Java 数组查找

    1 //要找的数 - 数组中的第一个元素 / 最大的数 - 第一个元素 2 //数组的查找(线性查找 二分法查找) 3 //线性查找: 4 //equals 5 6 String dest = &qu ...

  7. 虚拟机和开发板之间通过NFS互联

    简介 NFS是Network File System的首字母缩写.它是一种分布式协议,使客户端可以访问远程服务器上的共享文件.它允许网络中的计算机之间通过TCP/IP网络共享资源. 配置过程 安装NF ...

  8. crc16校验C语言源码实例解析

    一 概念: 循环冗余码校验英文名称为Cyclical Redundancy Check,简称CRC.它是利用除法及余数的原理来作错误侦测(Error Detecting)的.实际应用时,发送装置计算出 ...

  9. Redis数据库安装与使用总结

    Redis语句总结 一.基本概念 Redis 全称: Remote Dictionary Server(远程字典服务器)的缩写,以字典结构存储数据,并允许其他应用通过TCP协议读写字典中的内容. 使用 ...

  10. 记录--Vue中使用websocket的正确姿势

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 1:首先谈谈websocket是什么? WebSocket是一种在单个TCP连接上进行全双工通信的协议.WebSocket通信协议于201 ...