最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Pandas借助Numpy實現(xiàn)優(yōu)化的條件檢索代碼

 更新時間:2024年03月21日 15:34:45   作者:wang_yb  
Numpy其實是最早的處理數(shù)據(jù)的Python庫,它的核心ndarray對象,是一個高效的n維數(shù)組結(jié)構(gòu),本文主要介紹了Pandas如何借助Numpy優(yōu)化條件檢索,感興趣的可以了解下

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

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

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

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

1. 準備數(shù)據(jù)

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

import pandas as pd
import numpy as np

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

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

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()

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

下面我們用Numpy的 np.where 接口來改造上面的代碼。

np.where類似Python編程語言中的if-else判斷,基本語法:

import numpy as np

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

其中:

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

如果未提供x 和 y,則函數(shù)僅返回滿足條件的元素的索引。

改造后的代碼如下:

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

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

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

運行之后返回的結(jié)果是一樣的,但是性能提升很多。

如果數(shù)據(jù)量是幾十萬量級的話,你會發(fā)現(xiàn)改造之后的代碼運行效率提高了幾百倍。

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

上面的示例中,判斷還比較簡單,屬于if-else,也就是是與否的判斷。

下面設(shè)計一種更復(fù)雜的判斷,將成交信息評估為“優(yōu)良中差”4個等級,而不僅僅是“OK”“NG”。

我們假設(shè):

  • 優(yōu):房屋精裝,且位于中樓層,且近地鐵
  • :總價<300,且近地鐵
  • :總價<400
  • :其他情況

用傳統(tǒng)的方式,同樣是封裝一個類似filter_data的函數(shù)來判斷“優(yōu)良中差”4個等級,然后用 apply 函數(shù)來完成數(shù)據(jù)過濾。

這里就不演示了,直接看結(jié)合Numpynp.select接口,高效的完成“優(yōu)良中差”4個等級的過濾。

np.select類似Python編程語言中的match匹配,基本語法:

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

其中:

  • condlist:條件列表,每個條件都是一個布爾數(shù)組。
  • choicelist:與 condlist 對應(yīng)的數(shù)組列表,當某個條件為真時,返回該位置對應(yīng)的數(shù)組中的元素。
  • default:可選參數(shù),當沒有條件為真時返回的默認值。
# 設(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)", "良", "中"]

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

這樣,就實現(xiàn)了一個對成交信息的分類。

4. 總結(jié)

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

所以,我們在使用Pandas分析數(shù)據(jù)時,應(yīng)盡量使用np.where 和 np.select來幫助我們過濾數(shù)據(jù),這樣不僅能夠讓代碼更加簡潔專業(yè),而且能夠極大的提高分析性能。

到此這篇關(guān)于Pandas借助Numpy實現(xiàn)優(yōu)化的條件檢索代碼的文章就介紹到這了,更多相關(guān)Pandas Numpy優(yōu)化條件檢索內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 基于Python 的語音重采樣函數(shù)解析

    基于Python 的語音重采樣函數(shù)解析

    這篇文章主要介紹了基于Python 的語音重采樣函數(shù)解析,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-07-07
  • Python使用pandas處理CSV文件的實例講解

    Python使用pandas處理CSV文件的實例講解

    今天小編就為大家分享一篇Python使用pandas處理CSV文件的實例講解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-06-06
  • Python利用matplotlib.pyplot.boxplot()繪制箱型圖實例代碼

    Python利用matplotlib.pyplot.boxplot()繪制箱型圖實例代碼

    相信大家應(yīng)該都知道Python繪制箱線圖主要用matplotlib庫里pyplot模塊里的boxplot()函數(shù),下面這篇文章主要給大家介紹了關(guān)于Python利用matplotlib.pyplot.boxplot()繪制箱型圖的相關(guān)資料,需要的朋友可以參考下
    2022-08-08
  • Python基礎(chǔ)globlal nonlocal和閉包函數(shù)裝飾器語法糖

    Python基礎(chǔ)globlal nonlocal和閉包函數(shù)裝飾器語法糖

    這篇文章主要為大家介紹了Python基礎(chǔ)globlal nonlocal和閉包函數(shù)裝飾器語法糖示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-11-11
  • GitHub?AI編程工具copilot在Pycharm的應(yīng)用

    GitHub?AI編程工具copilot在Pycharm的應(yīng)用

    最近聽說github出了一種最新的插件叫做copilot,這篇文章主要給大家介紹了關(guān)于GitHub?AI編程工具copilot在Pycharm的應(yīng)用,目前感覺確實不錯,建議大家也去使用,需要的朋友可以參考下
    2022-04-04
  • 對DataFrame數(shù)據(jù)中的重復(fù)行,利用groupby累加合并的方法詳解

    對DataFrame數(shù)據(jù)中的重復(fù)行,利用groupby累加合并的方法詳解

    今天小編就為大家分享一篇對DataFrame數(shù)據(jù)中的重復(fù)行,利用groupby累加合并的方法詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-01-01
  • Python數(shù)據(jù)結(jié)構(gòu)之鏈表詳解

    Python數(shù)據(jù)結(jié)構(gòu)之鏈表詳解

    在順序存儲方式中,根據(jù)數(shù)據(jù)元素的序號就可隨機存取表中任何一個元素,但同時在插入和刪除運算需要移動大量的元素,造成算法效率較低。解決此缺陷的一個辦法是:對線性表采用鏈式存儲方式。本文將介紹鏈式存儲結(jié)構(gòu)的特點以及各種基本操作的實現(xiàn)。需要的可以參考一下
    2022-01-01
  • Python scipy實現(xiàn)差分進化算法

    Python scipy實現(xiàn)差分進化算法

    差分進化算法是廣義的遺傳算法的一種,核心思想是變異,這篇文章主要為大家介紹的則是著名的scipy庫中對差分進化算法的實現(xiàn),希望對大家有所幫助
    2023-08-08
  • python實現(xiàn)n個數(shù)中選出m個數(shù)的方法

    python實現(xiàn)n個數(shù)中選出m個數(shù)的方法

    今天小編就為大家分享一篇python實現(xiàn)n個數(shù)中選出m個數(shù)的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-11-11
  • python中計算一個列表中連續(xù)相同的元素個數(shù)方法

    python中計算一個列表中連續(xù)相同的元素個數(shù)方法

    今天小編就為大家分享一篇python中計算一個列表中連續(xù)相同的元素個數(shù)方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-06-06

最新評論

达州市| 石渠县| 灵川县| 南投市| 宜良县| 凤庆县| 灵宝市| 遵义市| 嘉善县| 桐柏县| 若羌县| 仙游县| 天门市| 和田市| 阿拉善左旗| 元江| 普定县| 额敏县| 隆尧县| 镶黄旗| 吉林省| 大庆市| 锡林郭勒盟| 呼和浩特市| 上饶县| 陇川县| 炉霍县| 苍山县| 宾阳县| 进贤县| 孙吴县| 黔东| 通渭县| 綦江县| 犍为县| 砚山县| 莒南县| 屏边| 齐河县| 青海省| 阿拉善右旗|