借助Numpy,优化Pandas的条件检索代码

这篇具有很好参考价值的文章主要介绍了借助Numpy,优化Pandas的条件检索代码。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Numpy其实是最早的处理数据的Python库,它的核心ndarray对象,是一个高效的n维数组结构。

通过这个库,可以高效的完成向量和矩阵运算,由于其出色的性能,很多其他的数据分析,科学计算或者机器学习相关的Python库都或多或少的依赖于它。

Pandas就是其中之一,Pandas充分利用了NumPy的数组运算功能,使得数据处理和分析更加高效。
比如,Pandas中最重要的两个数据结构SeriesDataFrame在内部就使用了NumPyndarray来存储数据。

在使用Pandas进行数据分析的过程中,按条件检索和过滤数据是最频繁的操作。
本文介绍两种通过结合Numpy,一方面让Pandas的检索过滤代码更加简洁易懂,另一方面还能保障检索过滤的高性能。

1. 准备数据

第一步,先准备数据,这次使用二手房交易数据,可从 https://databook.top/lianjia/nj 下载。

import pandas as pd
import numpy as np

# 这个路径替换成自己的路径
fp = r'D:\data\南京二手房交易\南京江宁区.csv'

df = pd.read_csv(fp)
df.head()

借助Numpy,优化Pandas的条件检索代码

2. 一般条件判断(np.where)

比如,买房前我们想先分析下已有的成交信息,对于房价能有个大致的印象。
下面,按照总价和单价,先挑选总价200~300万之间,或者单价1万以下的成交信息。
符合条件返回“OK”,否则返回“NG”

def filter_data(row):
    if row["totalPrice"] > 200 and row["totalPrice"] < 300:
        return "OK"

    if row["unitPrice"] < 10000:
        return "OK"

    return "NG"

df["评估"] = df.apply(filter_data, axis=1)
df[df["评估"] == "OK"].head()

借助Numpy,优化Pandas的条件检索代码

上面的过滤数据写法是使用Pandas时用的比较多的方式,也就是将过滤条件封装到一个自定义函数(filter_data)中,然后通过 apply 函数来完成数据过滤。

下面我们用Numpynp.where 接口来改造上面的代码。
np.where类似Python编程语言中的if-else判断,基本语法:

import numpy as np

np.where(condition[, x, y])

其中:

  • condition:条件表达式,返回布尔数组。
  • x 和 y:可选参数,conditionTrue,返回x,反之,返回y

如果未提供xy,则函数仅返回满足条件的元素的索引。

改造后的代码如下:

# 根据单价过滤
cond_unit_price = np.where(
    df["unitPrice"] < 10000,
    "OK",
    "NG",
)

# 先根据总价过滤,不满足条件再用单价过滤
cond_total_price = np.where(
    (df["totalPrice"] > 200) & (df["totalPrice"] < 300),
    "OK",
    cond_unit_price,
)

df["评估"] = cond_total_price
df[df["评估"] == "OK"].head()

运行之后返回的结果是一样的,但是性能提升很多。
如果数据量是几十万量级的话,你会发现改造之后的代码运行效率提高了几百倍。

3. 复杂多条件判断(np.select)

上面的示例中,判断还比较简单,属于if-else,也就是是与否的判断。
下面设计一种更复杂的判断,将成交信息评估为“优良中差”4个等级,而不仅仅是“OK”“NG”
我们假设:

  1. :房屋精装,且位于中楼层,且近地铁
  2. :总价<300,且近地铁
  3. :总价<400
  4. :其他情况

用传统的方式,同样是封装一个类似filter_data的函数来判断“优良中差”4个等级,然后用 apply 函数来完成数据过滤。
这里就不演示了,直接看结合Numpynp.select接口,高效的完成“优良中差”4个等级的过滤。

np.select类似Python编程语言中的match匹配,基本语法:

numpy.select(condlist, choicelist, default=0)

其中:

  • condlist:条件列表,每个条件都是一个布尔数组。
  • choicelist:与 condlist 对应的数组列表,当某个条件为真时,返回该位置对应的数组中的元素。
  • default:可选参数,当没有条件为真时返回的默认值。
# 设置 “优,良,中” 的判断条件
conditions = [
    df["houseInfo"].str.contains("精装")
    & df["positionInfo"].str.contains("中楼层")
    & df["advantage"].str.contains("近地铁"),
    
    (df["totalPrice"] < 300) & df["advantage"].str.contains("近地铁"),
    
    df["totalPrice"] < 400,
]
choices = ["优", "良", "中"]

# 默认为 “差”
df["评估"] = np.select(conditions, choices, default="差")
df.head()

借助Numpy,优化Pandas的条件检索代码
这样,就实现了一个对成交信息的分类。

4. 总结

np.wherenp.select的底层都是向量化的方式来操作数据,执行效率非常高。

所以,我们在使用Pandas分析数据时,应尽量使用np.wherenp.select来帮助我们过滤数据,这样不仅能够让代码更加简洁专业,而且能够极大的提高分析性能。文章来源地址https://www.toymoban.com/news/detail-842098.html

到了这里,关于借助Numpy,优化Pandas的条件检索代码的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【pandas基础】--数据检索

    pandas 的数据检索功能是其最基础也是最重要的功能之一。 pandas 中最常用的几种数据过滤方式如下: 行列过滤:选取指定的行或者列 条件过滤:对列的数据设置过滤条件 函数过滤:通过函数设置更加复杂的过滤条件 本篇所有示例所使用的测试数据如下: pandas 中最常用的按

    2024年02月03日
    浏览(45)
  • DS/ML:模型全流程优化之系统优化—替代Pandas库的大数据高效处理技术优化集合如HDF5技术(压缩文件)+vaex库(内存映射)+dask库(集群技术)替代pandas的各自骚操作实现代码

    DS/ML:模型全流程优化之系统优化—替代Pandas库的大数据高效处理技术优化集合如HDF5技术(压缩文件)+vaex库(内存映射)+dask库(集群技术)替代pandas的各自骚操作实现代码 目录

    2024年02月09日
    浏览(51)
  • Numpy&Pandas的区别和联系

    目录 一、Numpy 二、Pandas numpy是以矩阵为基础的数学计算模块,提供高性能的矩阵运算,数组结构为 ndarray 。 首先需要明确 数组与列表的区别 :数组是一种特殊变量,虽与列表相似,但列表可以存储任意类型的数据,数组只能存储一种类型的数据,同时,数组提供了许多方便

    2023年04月08日
    浏览(45)
  • 【数据分析】matplotlib、numpy、pandas速通

    教程链接:【python教程】数据分析——numpy、pandas、matplotlib 资料:https://github.com/TheisTrue/DataAnalysis 官网链接:可查询各种图的使用及代码 对比常用统计图 (1)引入 (2) 示例 (3) 设置图片大小 figsize: 图片的 (长, 宽) dpi: 每英寸像素点的个数,例如选定为 80 (图像模糊

    2024年01月24日
    浏览(35)
  • python 计算均值、方差、标准差 Numpy,Pandas

    Python 中的 numpy 包 和 pandas 包都能够计算均值、方差等,本文总结一下它们的用法。 #1. Numpy 计算均值、方差、标准差 一般的均值可以用 numpy 中的 mean 方法求得: numpy 中的 average 方法不仅能求得简单平均数,也可以求出加权平均数。average 里面可以跟一个 weights 参数,里面是

    2024年02月08日
    浏览(47)
  • 不平衡电网条件下基于变频器DG操作的多目标优化研究(Matlab代码&Simulink实现)

    目录 💥1 概述 📚2 运行结果 🎉3 参考文献 🌈4 Matlab代码Simulink实现文章讲解 文献来源: 最近,利用并网转换器(GCC)克服电网故障并支撑电网电压已成为电网规范中反映的主要要求。本文提出了一种新颖的参考电流产生方案,该方案通过使用四个控制参数注入一组适当的

    2024年02月14日
    浏览(49)
  • NumPy 和 Pandas 数据分析实用指南:1~6 全

    原文:Hands-On Data Analysis with NumPy and pandas 协议:CC BY-NC-SA 4.0 译者:飞龙 在本章中,我们将介绍以下主题: 安装 Anaconda 探索 Jupyter 笔记本 探索 Jupyter 的替代品 管理 Anaconda 包 配置数据库 在本章中,我们将讨论如何安装和管理 Anaconda。 Anaconda 是一个包,我们将在本书的以下各

    2023年04月14日
    浏览(81)
  • 银行营销数据分析---Python(numpy、pandas、matplotlib)

    数据来源:kaggle银行营销数据 工具:Python、Jupyter Notebook 本项目采取的是kaggle银行营销的数据源,主要是预测客户是否会订购银行的产品,但是,这次我将 使用numpy、pandas、matplotlib数据分析三件套,基于源数据,深入分析影响银行三大业务—存款、贷款、营销产品的因素 ,

    2024年02月07日
    浏览(58)
  • ES大量数据条件检索准确性问题

    事例:如查询0~1000的结果集时,分页查询乱序,会搜索出来,也会搜索不出来,目前查询到的结果是分片不一致导致的,需要指定唯一分片查询 ES中基于分片的搜索方式,是分2个阶段进行的,即Query阶段和Fetch阶段。 ES的搜索类型有2种; query then fetch(默认的搜索方式) 基于

    2024年02月04日
    浏览(60)
  • 【Pandas学习】多条件筛选DataFrame

    目录 一、按列筛选 1、简单筛选 2、多条件筛选  二、按行筛选 三、多条件组合 DataFrameSeries  执行 、 、 == 这些运算符时,会将每一个元素进行比较,得到一个由结果( Boolean 值)组成的相同大小的 DataFrameSeries 返回。 相同大小的 DataFrameSeries 之间可以用 、 | 、 ~ 运算符进

    2024年02月16日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包