pandas数据分析之数据运算(逻辑运算、算术运算、统计运算、自定义运算)

简介: 数据分析离不开数据运算,在介绍完pandas的数据加载、排序和排名、数据清洗之后,本文通过实例来介绍pandas的常用数据运算,包括逻辑运算、算术运算、统计运算及自定义运算。

数据分析离不开数据运算,在介绍完pandas的数据加载、排序和排名、数据清洗之后,本文通过实例来介绍pandas的常用数据运算,包括逻辑运算、算术运算、统计运算及自定义运算。

一、逻辑运算

逻辑运算是程序代码中经常用到的一种运算。pandas的逻辑运算与Python基础语法中的逻辑运算存在一些差异。pandas的逻辑运算主要用于条件过滤根据条件逻辑运算得出的结果过滤检索出相应的数据。
我们来看一些例子:
数据集为学生数据集

import pandas as pd
import numpy as np
df = pd.read_excel('D:\\Python\\study\\pythontest\\pandastest\\数据集\\student.xlsx')
df

学生数据集
我们要过滤检索出语文成绩大于95分的数据,通过df['4-语文']>95的条件语句,可以得到一个结果为bool值的Series,True表示满足语文成绩>95分的,False表示不满足语文成绩>95的。
在pandas中,将Series与数值进行比较,会得到一个与自身形状相同且全为布尔值的Series,每个位置的布尔值对应该位置的比较结果。
这种进行比较的代码,返回值是布尔值,是一种布尔表达式,也可以被称为逻辑语句,只要代码返回的结果是布尔值,都可以把代码当成逻辑语句。
语文大于95的逻辑运算
根据逻辑语句的布尔值,可以用来对数据进行筛选,按我们的需要从大量数据中过滤出目标数据。如我们要过滤出语文成绩大于95的数据,就可以用上述逻辑语句的布尔值进行筛选。

df[df['4-语文']>95]

语文大于95的结果

除了直接的比较,pandas中有很多函数都会返回布尔值,如all(),any(),isna()等对整个DataFrame或Series的判断结果,eq(),ne(),lt(),gt()等比较函数的结果,都是布尔值。
逻辑语句是为逻辑运算服务的,可以直接作为判断条件。在复杂的逻辑关系中,需要使用复合逻辑运算,用逻辑运算符来连接多个逻辑语句,复合逻辑运算包含:逻辑与&、逻辑或|、逻辑非~。

逻辑与&

pandas中用符号 & 表示逻辑与,连接两个逻辑语句,同时为真才为真。在Python基本语法中,使用 and 表示逻辑与,但是Pandas中只能用 & ,不能用and,会报模糊错误。
如我们要检索出一班并且语文成绩大于95的数据。可以用 df[(df['4-语文']>95) & (df['班级']=='一班')]
注意两个条件逻辑语句要分别用()括起来然后再用逻辑运算符进行运算。
逻辑与&

逻辑或|

pandas中用符号 | 表示逻辑或,连接两个逻辑语句,只要其中一个为真就为真。
在Python基本语法中,使用 or 表示逻辑或,但是Pandas中只能用 | ,不能用or。
如我们要检索出语文成绩大于95或英语成绩大于96的数据

df[(df['4-语文']>95)|(df['6-英语']>96)]

逻辑或|

逻辑非~

pandas中用符号 ~ 表示逻辑非,对逻辑语句取反。
在Python基本语法中,使用 not 表示逻辑非,但是Pandas中只能用 ~ ,不能用not。
如我们要检索出数据成绩>98并且不是一班的同学

df[(df['5-数学']>98) & ~(df['班级']=='一班')]

逻辑非~

当然也可以用

df[(df['5-数学']>98) & (df['班级']!='一班')]

逻辑不等于

二、算术运算

pandas最重要的一个功能是,它可以对不同索引的对象进行算术运算也就是(+、-、*、\)。
常见的算术云算是加法+运算,如果相加的对象是标量,则数据对象通过广播机制,每个数据值都+标量。如果相加的对象是数据对象则按索引进行算术运算。
通过一个数据集来看一下

import pandas as pd
import numpy as np
data1=pd.DataFrame(np.arange(16).reshape((4,4)),columns=['列1','列2','列3','列4'])
data1

数据运算数据集

1、使用算术运算符

和标量计算,标量运算会在算术运算过程中传播。

data2=data1+1
data2

加标量
可以看到数据集中每个值都+1了
和索引相同的数据对象运算,对每个数据值进行算术运算

data3=pd.DataFrame(np.arange(16).reshape((4,4)),columns=['列1','列2','列3','列4'])
data4=data2+data3
data4

DataFrame相加

在将对象相加时,如果存在不同的索引就是该索引对的并集。自动的数据对齐操作在不重叠的索引引入NA值。缺失值会在算术运算过程中传播。

data5=pd.DataFrame(np.ones([3,3]),columns=['列1','列2','列3'])
data5

全为1的数据集

data6=data4+data5
data6

形状不同的数据集相加

2、使用算数运算函数

算数运算函数包括add、sub、div、mul等对应于算术运算符如下:

方法 说明
add,radd 用于加法(+)的方法
sub,rsub 用于减法(- )的方法
div,rdiv 用于除法(/)的方法
floordiv,rfloordiv 用于底除(//)的方法
mul,rmul 用于乘法(* )的方法
pow,rpow 用于指数(**)的方法

加法:

在对不同索引的对象进行算术运算时,如果希望当一个对象中某个轴标签在另一个对象中找不到时填充一个特殊值比如0,可以通过算术方法进行填充,然后再相加。
加法函数
上面的例子展示了,因为data5的行索引为3和列索引为列4用0填充后再相加所以行索引为3和列索引为列4的值是data4的值+0

减法:

data4.sub(1)

sub函数

乘法:

data4.mul(2)

mul函数

除法:

div函数

三、统计运算

统计运算就是我们常用的数据集的求和、算平均值、最大值、最小值、绝对值、标准差等统计数据。在pandas中提供了丰富的统计函数可以方便的进行统计运算。

1、describe汇总描述统计

通过np.random.randn(1000,4)生成1000个正态分布的随机数据集看一下describe的汇总描叙统计。
包含了数据个数count、均值mean、标准差std、最小值min、最大值等。

#1000个正态分布的随机数统计信息
data=pd.DataFrame(np.random.randn(1000,4))
data.describe()

describe汇总描述统计

2、统计函数

pandas常用统计函数如下:
常用统计函数

data.max()

max函数

可以算出DataFrame中每一列的最大值

如果只需要计算某一列的最大值

data[1].max()

计算某一列的最大值

对单个函数进行统计的时候,坐标轴还是按照这些默认为columns(axis=0, default),如果要对index进行统计,则要指明(axis=1) 这里的axis取值与axis=0对应index,axis=1对应columns不同

  • 使用0值表示沿着每一列或行标签\索引值向下执行方法
  • 使用1值表示沿着每一行或者列标签模向执行对应的方法
    axis=1

如果要计算某一行的最大值
data.loc[0].max(),通过loc[]检索出需要统计的行,再用统计函数进行统计
计算某一行的最大值
累计统计cumsum,计算前n个数的和
计算前n个数的和

四、自定义运算

如果常用的统计运算还不能满足,pandas提供了方法可以进行自定义运算。

apply(func, axis=0)

  • func – 自定义函数 axis=0 – 默认是列(按行标签方向执行方法)
  • axis=1为对行进行运算(按列标签方向执行方法)

如:自定义一个对列求max-min的函数
head()
通过lambda匿名函数

data.apply(lambda x: x.max() - x.min()) # lambda为匿名函数,x为自变量,冒号后面为函数表达式

lambda匿名函数

通过自定义函数

#自定义函数
def maxdivmin(x):
    return x.max()-x.min()

自定义函数
至此,本文通过实例简单介绍了pandas数据分析的数据运算包括逻辑运算、算术运算、统计运算、自定义运算,也是平时在实际应用中常用的运算。

数据集及源代码见:https://github.com/xiejava1018/pandastest.git


作者博客:http://xiejava.ishareread.com/

目录
相关文章
|
17天前
|
数据采集 存储 数据挖掘
Python数据分析:Pandas库的高效数据处理技巧
【10月更文挑战第27天】在数据分析领域,Python的Pandas库因其强大的数据处理能力而备受青睐。本文介绍了Pandas在数据导入、清洗、转换、聚合、时间序列分析和数据合并等方面的高效技巧,帮助数据分析师快速处理复杂数据集,提高工作效率。
45 0
|
11天前
|
机器学习/深度学习 数据采集 数据挖掘
解锁 Python 数据分析新境界:Pandas 与 NumPy 高级技巧深度剖析
Pandas 和 NumPy 是 Python 中不可或缺的数据处理和分析工具。本文通过实际案例深入剖析了 Pandas 的数据清洗、NumPy 的数组运算、结合两者进行数据分析和特征工程,以及 Pandas 的时间序列处理功能。这些高级技巧能够帮助我们更高效、准确地处理和分析数据,为决策提供支持。
27 2
|
18天前
|
存储 数据挖掘 数据处理
Python数据分析:Pandas库的高效数据处理技巧
【10月更文挑战第26天】Python 是数据分析领域的热门语言,Pandas 库以其高效的数据处理功能成为数据科学家的利器。本文介绍 Pandas 在数据读取、筛选、分组、转换和合并等方面的高效技巧,并通过示例代码展示其实际应用。
30 2
|
9天前
|
并行计算 数据挖掘 大数据
Python数据分析实战:利用Pandas处理大数据集
Python数据分析实战:利用Pandas处理大数据集
|
9天前
|
数据采集 数据可视化 数据挖掘
利用Python进行数据分析:Pandas库实战指南
利用Python进行数据分析:Pandas库实战指南
|
1月前
|
机器学习/深度学习 数据采集 算法
探索Python科学计算的边界:NumPy、Pandas与SciPy在大规模数据分析中的高级应用
【10月更文挑战第5天】随着数据科学和机器学习领域的快速发展,处理大规模数据集的能力变得至关重要。Python凭借其强大的生态系统,尤其是NumPy、Pandas和SciPy等库的支持,在这个领域占据了重要地位。本文将深入探讨这些库如何帮助科学家和工程师高效地进行数据分析,并通过实际案例来展示它们的一些高级应用。
49 0
探索Python科学计算的边界:NumPy、Pandas与SciPy在大规模数据分析中的高级应用
|
1月前
|
数据采集 数据可视化 数据挖掘
Python 数据分析实战:使用 Pandas 进行数据清洗与可视化
【10月更文挑战第3天】Python 数据分析实战:使用 Pandas 进行数据清洗与可视化
91 0
|
2月前
|
机器学习/深度学习 数据处理 Python
从NumPy到Pandas:轻松转换Python数值库与数据处理利器
从NumPy到Pandas:轻松转换Python数值库与数据处理利器
76 0
|
1月前
|
机器学习/深度学习 并行计算 大数据
【Python篇】深入挖掘 Pandas:机器学习数据处理的高级技巧
【Python篇】深入挖掘 Pandas:机器学习数据处理的高级技巧
86 3
|
1月前
|
数据采集 数据挖掘 API
Python数据分析加速器:深度挖掘Pandas与NumPy的高级功能
在Python数据分析的世界里,Pandas和NumPy无疑是两颗璀璨的明星,它们为数据科学家和工程师提供了强大而灵活的工具集,用于处理、分析和探索数据。今天,我们将一起深入探索这两个库的高级功能,看看它们如何成为数据分析的加速器。
40 1