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回溯算法#01】图解组合问题
组合问题 力扣题目链接(opens new window) 给定两个整数 n 和 k,返回范围 [1, n] 中所有可能的 k 个数的组合. 示例: 输入: n = 4, k = 2 输出: [ [2 ...
- JS笔记:方法两次调用,执行不同分支(公共变量,闭包,类三种方法实现)
好家伙, 当我们对一个方法进行两次调用,我们希望第一次执行A分支,第二次执行B分支,该怎么做? 这意味着在连续的两次调用中,方法的执行逻辑会交替执行不同的分支. 方法一:公共变量 let flag ...
- 【Azure K8S|AKS】进入AKS的POD中查看文件,例如PVC Volume Mounts使用情况
问题描述 在昨天的文章中,创建了 Disk + PV + PVC + POD 方案(https://www.cnblogs.com/lulight/p/17604441.html),那么如何进入到PO ...
- 协程的async使用
async与launch一样都是开启一个协程,但是async会返回一个Deferred对象,该Deferred也是一个job async函数类似于 launch函数.它启动了一个单独的协程,这是一个轻 ...
- Java 可变个数形参的方法
1 /** 2 * 3 * @Description 4 * @author Bytezero·zhenglei! Email:420498246@qq.com 5 * @version 6 * @d ...
- 常用Linux系统性能分析命令
Linux系统提供了许多命令来分析系统性能.以下是一些常用的Linux系统性能分析命令: top:实时监视系统的运行状态和进程信息,包括CPU使用率.内存使用情况.进程状态等. 实例:直接在终端中输入 ...
- 将谷歌chrome浏览器主题变黑的方法
两个步骤: 第一: 桌面找到google chrome图标右键->属性,在后面加上: --force-dark-mode (注意有空格) 第二: 1.浏览器地址输入chrome://flags/ ...
- java基本数据类型及运算的注意事项
java基本数据类型及运算的注意事项 一.基本数据类型 序号 类型 位数 范围 说明 整数类型 (最高位为符号位) byte 8位 -128(-27)~127(27-1) 默认类型为int 二进制0b ...
- (二)Linux环境的学习环境的搭建
Xshell的安装和连接 由于我们打算通过Xshell进行命令的输入,就不再进行VMWARE-TOOLS的安装. 我们直接进行安装Xshell 并开始连接我们创建的创建的虚拟机 我们可以通过Xshel ...
- PAT 甲级1005【1005 Spell It Right】
用JAVA可以用BigInteger解决. import java.io.BufferedReader; import java.io.IOException; import java.io.Inpu ...