Pandas通用函数和运算
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通用函数和运算的更多相关文章
- Pandas分组级运算和转换
分组级运算和转换 假设要添加一列的各索引分组平均值 第一种方法 import pandas as pd from pandas import Series import numpy as np df ...
- pandas之聚合运算
通过聚合运算可以得到我们比较感兴趣的数据以方便处理 import pandas as pd import numpy as np # 先创建一组数据表DataFrame df = pd.DataFra ...
- pandas | DataFrame基础运算以及空值填充
本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是pandas数据处理专题的第四篇文章,我们一起来聊聊DataFrame中的索引. 上一篇文章当中我们介绍了DataFrame数据结构当 ...
- 数据分析工具Pandas
参考学习资料:http://pandas.pydata.org 1.什么是Pandas? Pandas的名称来自于面板数据(panel data)和Python数据分析(data analys ...
- pandas数据对齐
Pandas的对齐运算 是数据清洗的重要过程,可以按索引对齐进行运算,如果没对齐的位置则补NaN,最后也可以填充NaN Series的对齐运算 1. Series 按行.索引对齐 示例代码: s1 = ...
- Python之Pandas库常用函数大全(含注释)
前言:本博文摘抄自中国慕课大学上的课程<Python数据分析与展示>,推荐刚入门的同学去学习,这是非常好的入门视频. 继续一个新的库,Pandas库.Pandas库围绕Series类型和D ...
- (数据科学学习手札69)详解pandas中的map、apply、applymap、groupby、agg
*从本篇开始所有文章的数据和代码都已上传至我的github仓库:https://github.com/CNFeffery/DataScienceStudyNotes 一.简介 pandas提供了很多方 ...
- Python数据分析与展示[第三周](pandas数据类型操作)
数据类型操作 如何改变Series/ DataFrame 对象 增加或重排:重新索引 删除:drop 重新索引 .reindex() reindex() 能够改变或重排Series和DataFrame ...
- Python for Data Analysis 学习心得(二) - pandas介绍
一.pandas介绍 本篇程序上篇内容,在numpy下面继续介绍pandas,本书的作者是pandas的作者之一.pandas是非常好用的数据预处理工具,pandas下面有两个数据结构,分别为Seri ...
- 《利用python进行数据分析》读书笔记--第十一章 金融和经济数据应用(一)
自2005年开始,python在金融行业中的应用越来越多,这主要得益于越来越成熟的函数库(NumPy和pandas)以及大量经验丰富的程序员.许多机构发现python不仅非常适合成为交互式的分析环境, ...
随机推荐
- 【LeetCode回溯算法#05】分割回文串(复习双指针判断回文以及substr函数使用记录)
分割回文串 力扣题目链接 给你一个字符串 s,请你将 s 分割成一些子串,使每个子串都是 回文串 .返回 s 所有可能的分割方案. 回文串 是正着读和反着读都一样的字符串. 示例 1: 输入:s = ...
- 【LeetCode链表#12】链表相交
链表相交 同:160.链表相交 力扣题目链接(opens new window) 给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点.如果两个链表没有交点,返 ...
- 逆向实战32——某东最新h5st4.4算法分析
前言 本文章中所有内容仅供学习交流,抓包内容.敏感网址.数据接口均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关,若有侵权,请联系我立即删除! 目标网站 aHR0cHM6 ...
- [App Service for Windows]通过 KUDU 查看 Tomcat 配置信息
问题描述 在App Service 中选择了Java Tomcat后,如何查看Azure App Service的Tomcat的配置信息呢? 问题解答 可以通过以下的 3个步骤查看: 第一步:登录 K ...
- docker使用 mysql8
# docker pull mysql:8 # mkdir -p /mysql/{datadir,etc/mysql} # cat >/mysql/etc/mysql/my.cnf <&l ...
- 1. zookeeper简介与应用场景
1.1 zookeeper介绍 zookeeper是一个高可用的分布式管理与协调框架,基于ZAB算法(原子消息广播协议)的实现. 能够很好保证分布式环境中数据的一致性.正是基于这样的特性,使得zo ...
- 【技术积累】Java 8 新特性
一.Lambda表达式 Lambda 是一个匿名函数,我们可以把 Lambda表达式理解为是一段可以传递的代码(将代码像数据一样进行传递).可以写出更简洁.更灵活的代码.作为一种更紧凑的代码风格,使J ...
- 使用 Docker 部署 GLPI 资产管理系统
1)GLPI 介绍 GLPI 简介 参考: https://github.com/glpi-project/glpi 官方文档:https://glpi-project.org/documentati ...
- kubernetes 1.20版本 二进制部署
kubernetes 1.20版本 二进制部署 目录 kubernetes 1.20版本 二进制部署 1. 前言 2. 环境准备 2.1 机器规划 2.2 软件版本 3. 搭建集群 3.1 机器基本配 ...
- Rtsp转Flv在浏览器中播放
目录 概述 环境 项目目录清单 项目搭建步骤 引入相关npm依赖 实例化一个express应用 创建WebsocketServer并解析rtsp 使用flv播放 浏览器中测试 代码 引用 概述 众所周 ...