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. 【LeetCode回溯算法#05】分割回文串(复习双指针判断回文以及substr函数使用记录)

    分割回文串 力扣题目链接 给你一个字符串 s,请你将 s 分割成一些子串,使每个子串都是 回文串 .返回 s 所有可能的分割方案. 回文串 是正着读和反着读都一样的字符串. 示例 1: 输入:s = ...

  2. 【LeetCode链表#12】链表相交

    链表相交 同:160.链表相交 力扣题目链接(opens new window) 给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点.如果两个链表没有交点,返 ...

  3. 逆向实战32——某东最新h5st4.4算法分析

    前言 本文章中所有内容仅供学习交流,抓包内容.敏感网址.数据接口均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关,若有侵权,请联系我立即删除! 目标网站 aHR0cHM6 ...

  4. [App Service for Windows]通过 KUDU 查看 Tomcat 配置信息

    问题描述 在App Service 中选择了Java Tomcat后,如何查看Azure App Service的Tomcat的配置信息呢? 问题解答 可以通过以下的 3个步骤查看: 第一步:登录 K ...

  5. docker使用 mysql8

    # docker pull mysql:8 # mkdir -p /mysql/{datadir,etc/mysql} # cat >/mysql/etc/mysql/my.cnf <&l ...

  6. 1. zookeeper简介与应用场景

    1.1 zookeeper介绍   zookeeper是一个高可用的分布式管理与协调框架,基于ZAB算法(原子消息广播协议)的实现. 能够很好保证分布式环境中数据的一致性.正是基于这样的特性,使得zo ...

  7. 【技术积累】Java 8 新特性

    一.Lambda表达式 Lambda 是一个匿名函数,我们可以把 Lambda表达式理解为是一段可以传递的代码(将代码像数据一样进行传递).可以写出更简洁.更灵活的代码.作为一种更紧凑的代码风格,使J ...

  8. 使用 Docker 部署 GLPI 资产管理系统

    1)GLPI 介绍 GLPI 简介 参考: https://github.com/glpi-project/glpi 官方文档:https://glpi-project.org/documentati ...

  9. kubernetes 1.20版本 二进制部署

    kubernetes 1.20版本 二进制部署 目录 kubernetes 1.20版本 二进制部署 1. 前言 2. 环境准备 2.1 机器规划 2.2 软件版本 3. 搭建集群 3.1 机器基本配 ...

  10. Rtsp转Flv在浏览器中播放

    目录 概述 环境 项目目录清单 项目搭建步骤 引入相关npm依赖 实例化一个express应用 创建WebsocketServer并解析rtsp 使用flv播放 浏览器中测试 代码 引用 概述 众所周 ...