国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

借助Numpy,優(yōu)化Pandas的條件檢索代碼

這篇具有很好參考價(jià)值的文章主要介紹了借助Numpy,優(yōu)化Pandas的條件檢索代碼。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

Numpy其實(shí)是最早的處理數(shù)據(jù)的Python庫(kù),它的核心ndarray對(duì)象,是一個(gè)高效的n維數(shù)組結(jié)構(gòu)。

通過(guò)這個(gè)庫(kù),可以高效的完成向量和矩陣運(yùn)算,由于其出色的性能,很多其他的數(shù)據(jù)分析,科學(xué)計(jì)算或者機(jī)器學(xué)習(xí)相關(guān)的Python庫(kù)都或多或少的依賴(lài)于它。

Pandas就是其中之一,Pandas充分利用了NumPy的數(shù)組運(yùn)算功能,使得數(shù)據(jù)處理和分析更加高效。
比如,Pandas中最重要的兩個(gè)數(shù)據(jù)結(jié)構(gòu)SeriesDataFrame在內(nèi)部就使用了NumPyndarray來(lái)存儲(chǔ)數(shù)據(jù)。

在使用Pandas進(jìn)行數(shù)據(jù)分析的過(guò)程中,按條件檢索和過(guò)濾數(shù)據(jù)是最頻繁的操作。
本文介紹兩種通過(guò)結(jié)合Numpy,一方面讓Pandas的檢索過(guò)濾代碼更加簡(jiǎn)潔易懂,另一方面還能保障檢索過(guò)濾的高性能。

1. 準(zhǔn)備數(shù)據(jù)

第一步,先準(zhǔn)備數(shù)據(jù),這次使用二手房交易數(shù)據(jù),可從 https://databook.top/lianjia/nj 下載。

import pandas as pd
import numpy as np

# 這個(gè)路徑替換成自己的路徑
fp = r'D:\data\南京二手房交易\南京江寧區(qū).csv'

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

借助Numpy,優(yōu)化Pandas的條件檢索代碼

2. 一般條件判斷(np.where)

比如,買(mǎi)房前我們想先分析下已有的成交信息,對(duì)于房?jī)r(jià)能有個(gè)大致的印象。
下面,按照總價(jià)和單價(jià),先挑選總價(jià)200~300萬(wàn)之間,或者單價(jià)1萬(wàn)以下的成交信息。
符合條件返回“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["評(píng)估"] = df.apply(filter_data, axis=1)
df[df["評(píng)估"] == "OK"].head()

借助Numpy,優(yōu)化Pandas的條件檢索代碼

上面的過(guò)濾數(shù)據(jù)寫(xiě)法是使用Pandas時(shí)用的比較多的方式,也就是將過(guò)濾條件封裝到一個(gè)自定義函數(shù)(filter_data)中,然后通過(guò) apply 函數(shù)來(lái)完成數(shù)據(jù)過(guò)濾。

下面我們用Numpynp.where 接口來(lái)改造上面的代碼。
np.where類(lèi)似Python編程語(yǔ)言中的if-else判斷,基本語(yǔ)法:

import numpy as np

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

其中:

  • condition:條件表達(dá)式,返回布爾數(shù)組。
  • x 和 y:可選參數(shù),conditionTrue,返回x,反之,返回y。

如果未提供xy,則函數(shù)僅返回滿(mǎn)足條件的元素的索引。

改造后的代碼如下:

# 根據(jù)單價(jià)過(guò)濾
cond_unit_price = np.where(
    df["unitPrice"] < 10000,
    "OK",
    "NG",
)

# 先根據(jù)總價(jià)過(guò)濾,不滿(mǎn)足條件再用單價(jià)過(guò)濾
cond_total_price = np.where(
    (df["totalPrice"] > 200) & (df["totalPrice"] < 300),
    "OK",
    cond_unit_price,
)

df["評(píng)估"] = cond_total_price
df[df["評(píng)估"] == "OK"].head()

運(yùn)行之后返回的結(jié)果是一樣的,但是性能提升很多。
如果數(shù)據(jù)量是幾十萬(wàn)量級(jí)的話,你會(huì)發(fā)現(xiàn)改造之后的代碼運(yùn)行效率提高了幾百倍。

3. 復(fù)雜多條件判斷(np.select)

上面的示例中,判斷還比較簡(jiǎn)單,屬于if-else,也就是是與否的判斷。
下面設(shè)計(jì)一種更復(fù)雜的判斷,將成交信息評(píng)估為“優(yōu)良中差”4個(gè)等級(jí),而不僅僅是“OK”“NG”。
我們假設(shè):

  1. 優(yōu):房屋精裝,且位于中樓層,且近地鐵
  2. :總價(jià)<300,且近地鐵
  3. :總價(jià)<400
  4. :其他情況

用傳統(tǒng)的方式,同樣是封裝一個(gè)類(lèi)似filter_data的函數(shù)來(lái)判斷“優(yōu)良中差”4個(gè)等級(jí),然后用 apply 函數(shù)來(lái)完成數(shù)據(jù)過(guò)濾。
這里就不演示了,直接看結(jié)合Numpynp.select接口,高效的完成“優(yōu)良中差”4個(gè)等級(jí)的過(guò)濾。

np.select類(lèi)似Python編程語(yǔ)言中的match匹配,基本語(yǔ)法:

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

其中:

  • condlist:條件列表,每個(gè)條件都是一個(gè)布爾數(shù)組。
  • choicelist:與 condlist 對(duì)應(yīng)的數(shù)組列表,當(dāng)某個(gè)條件為真時(shí),返回該位置對(duì)應(yīng)的數(shù)組中的元素。
  • default:可選參數(shù),當(dāng)沒(méi)有條件為真時(shí)返回的默認(rèn)值。
# 設(shè)置 “優(yōu),良,中” 的判斷條件
conditions = [
    df["houseInfo"].str.contains("精裝")
    & df["positionInfo"].str.contains("中樓層")
    & df["advantage"].str.contains("近地鐵"),
    
    (df["totalPrice"] < 300) & df["advantage"].str.contains("近地鐵"),
    
    df["totalPrice"] < 400,
]
choices = ["優(yōu)", "良", "中"]

# 默認(rèn)為 “差”
df["評(píng)估"] = np.select(conditions, choices, default="差")
df.head()

借助Numpy,優(yōu)化Pandas的條件檢索代碼
這樣,就實(shí)現(xiàn)了一個(gè)對(duì)成交信息的分類(lèi)。

4. 總結(jié)

np.wherenp.select的底層都是向量化的方式來(lái)操作數(shù)據(jù),執(zhí)行效率非常高。

所以,我們?cè)谑褂肞andas分析數(shù)據(jù)時(shí),應(yīng)盡量使用np.wherenp.select來(lái)幫助我們過(guò)濾數(shù)據(jù),這樣不僅能夠讓代碼更加簡(jiǎn)潔專(zhuān)業(yè),而且能夠極大的提高分析性能。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-842098.html

到了這里,關(guān)于借助Numpy,優(yōu)化Pandas的條件檢索代碼的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶(hù)投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【pandas基礎(chǔ)】--數(shù)據(jù)檢索

    pandas 的數(shù)據(jù)檢索功能是其最基礎(chǔ)也是最重要的功能之一。 pandas 中最常用的幾種數(shù)據(jù)過(guò)濾方式如下: 行列過(guò)濾:選取指定的行或者列 條件過(guò)濾:對(duì)列的數(shù)據(jù)設(shè)置過(guò)濾條件 函數(shù)過(guò)濾:通過(guò)函數(shù)設(shè)置更加復(fù)雜的過(guò)濾條件 本篇所有示例所使用的測(cè)試數(shù)據(jù)如下: pandas 中最常用的按

    2024年02月03日
    瀏覽(20)
  • DS/ML:模型全流程優(yōu)化之系統(tǒng)優(yōu)化—替代Pandas庫(kù)的大數(shù)據(jù)高效處理技術(shù)優(yōu)化集合如HDF5技術(shù)(壓縮文件)+vaex庫(kù)(內(nèi)存映射)+dask庫(kù)(集群技術(shù))替代pandas的各自騷操作實(shí)現(xiàn)代碼

    DS/ML:模型全流程優(yōu)化之系統(tǒng)優(yōu)化—替代Pandas庫(kù)的大數(shù)據(jù)高效處理技術(shù)優(yōu)化集合如HDF5技術(shù)(壓縮文件)+vaex庫(kù)(內(nèi)存映射)+dask庫(kù)(集群技術(shù))替代pandas的各自騷操作實(shí)現(xiàn)代碼 目錄

    2024年02月09日
    瀏覽(30)
  • Numpy&Pandas的區(qū)別和聯(lián)系

    Numpy&Pandas的區(qū)別和聯(lián)系

    目錄 一、Numpy 二、Pandas numpy是以矩陣為基礎(chǔ)的數(shù)學(xué)計(jì)算模塊,提供高性能的矩陣運(yùn)算,數(shù)組結(jié)構(gòu)為 ndarray 。 首先需要明確 數(shù)組與列表的區(qū)別 :數(shù)組是一種特殊變量,雖與列表相似,但列表可以存儲(chǔ)任意類(lèi)型的數(shù)據(jù),數(shù)組只能存儲(chǔ)一種類(lèi)型的數(shù)據(jù),同時(shí),數(shù)組提供了許多方便

    2023年04月08日
    瀏覽(19)
  • 【數(shù)據(jù)分析】matplotlib、numpy、pandas速通

    【數(shù)據(jù)分析】matplotlib、numpy、pandas速通

    教程鏈接:【python教程】數(shù)據(jù)分析——numpy、pandas、matplotlib 資料:https://github.com/TheisTrue/DataAnalysis 官網(wǎng)鏈接:可查詢(xún)各種圖的使用及代碼 對(duì)比常用統(tǒng)計(jì)圖 (1)引入 (2) 示例 (3) 設(shè)置圖片大小 figsize: 圖片的 (長(zhǎng), 寬) dpi: 每英寸像素點(diǎn)的個(gè)數(shù),例如選定為 80 (圖像模糊

    2024年01月24日
    瀏覽(25)
  • python 計(jì)算均值、方差、標(biāo)準(zhǔn)差 Numpy,Pandas

    python 計(jì)算均值、方差、標(biāo)準(zhǔn)差 Numpy,Pandas

    Python 中的 numpy 包 和 pandas 包都能夠計(jì)算均值、方差等,本文總結(jié)一下它們的用法。 #1. Numpy 計(jì)算均值、方差、標(biāo)準(zhǔn)差 一般的均值可以用 numpy 中的 mean 方法求得: numpy 中的 average 方法不僅能求得簡(jiǎn)單平均數(shù),也可以求出加權(quán)平均數(shù)。average 里面可以跟一個(gè) weights 參數(shù),里面是

    2024年02月08日
    瀏覽(25)
  • 不平衡電網(wǎng)條件下基于變頻器DG操作的多目標(biāo)優(yōu)化研究(Matlab代碼&Simulink實(shí)現(xiàn))

    不平衡電網(wǎng)條件下基于變頻器DG操作的多目標(biāo)優(yōu)化研究(Matlab代碼&Simulink實(shí)現(xiàn))

    目錄 ??1 概述 ??2 運(yùn)行結(jié)果 ??3?參考文獻(xiàn) ??4 Matlab代碼Simulink實(shí)現(xiàn)文章講解 文獻(xiàn)來(lái)源: 最近,利用并網(wǎng)轉(zhuǎn)換器(GCC)克服電網(wǎng)故障并支撐電網(wǎng)電壓已成為電網(wǎng)規(guī)范中反映的主要要求。本文提出了一種新穎的參考電流產(chǎn)生方案,該方案通過(guò)使用四個(gè)控制參數(shù)注入一組適當(dāng)?shù)?/p>

    2024年02月14日
    瀏覽(28)
  • 銀行營(yíng)銷(xiāo)數(shù)據(jù)分析---Python(numpy、pandas、matplotlib)

    銀行營(yíng)銷(xiāo)數(shù)據(jù)分析---Python(numpy、pandas、matplotlib)

    數(shù)據(jù)來(lái)源:kaggle銀行營(yíng)銷(xiāo)數(shù)據(jù) 工具:Python、Jupyter Notebook 本項(xiàng)目采取的是kaggle銀行營(yíng)銷(xiāo)的數(shù)據(jù)源,主要是預(yù)測(cè)客戶(hù)是否會(huì)訂購(gòu)銀行的產(chǎn)品,但是,這次我將 使用numpy、pandas、matplotlib數(shù)據(jù)分析三件套,基于源數(shù)據(jù),深入分析影響銀行三大業(yè)務(wù)—存款、貸款、營(yíng)銷(xiāo)產(chǎn)品的因素 ,

    2024年02月07日
    瀏覽(29)
  • NumPy 和 Pandas 數(shù)據(jù)分析實(shí)用指南:1~6 全

    原文:Hands-On Data Analysis with NumPy and pandas 協(xié)議:CC BY-NC-SA 4.0 譯者:飛龍 在本章中,我們將介紹以下主題: 安裝 Anaconda 探索 Jupyter 筆記本 探索 Jupyter 的替代品 管理 Anaconda 包 配置數(shù)據(jù)庫(kù) 在本章中,我們將討論如何安裝和管理 Anaconda。 Anaconda 是一個(gè)包,我們將在本書(shū)的以下各

    2023年04月14日
    瀏覽(24)
  • ES大量數(shù)據(jù)條件檢索準(zhǔn)確性問(wèn)題

    事例:如查詢(xún)0~1000的結(jié)果集時(shí),分頁(yè)查詢(xún)亂序,會(huì)搜索出來(lái),也會(huì)搜索不出來(lái),目前查詢(xún)到的結(jié)果是分片不一致導(dǎo)致的,需要指定唯一分片查詢(xún) ES中基于分片的搜索方式,是分2個(gè)階段進(jìn)行的,即Query階段和Fetch階段。 ES的搜索類(lèi)型有2種; query then fetch(默認(rèn)的搜索方式) 基于

    2024年02月04日
    瀏覽(13)
  • 【Pandas學(xué)習(xí)】多條件篩選DataFrame

    目錄 一、按列篩選 1、簡(jiǎn)單篩選 2、多條件篩選? 二、按行篩選 三、多條件組合 DataFrameSeries ?執(zhí)行 、 、 == 這些運(yùn)算符時(shí),會(huì)將每一個(gè)元素進(jìn)行比較,得到一個(gè)由結(jié)果( Boolean 值)組成的相同大小的 DataFrameSeries 返回。 相同大小的 DataFrameSeries 之間可以用 、 | 、 ~ 運(yùn)算符進(jìn)

    2024年02月16日
    瀏覽(19)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包