成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Pandas圖鑒之一:Pandas vs Numpy

數據庫 其他數據庫
如果你100%?確定你的列中沒有缺失值,那么使用df.column.values.sum()?而不是df.column.sum()?來獲得x3-x30?的性能提升是有意義的。在存在缺失值的情況下,Pandas的速度是相當不錯的,對于巨大的數組(超過10?個元素)來說,甚至比NumPy還要好。

圖片圖片

Pandas[1]是用Python分析數據的工業標準。只需敲幾下鍵盤,就可以加載、過濾、重組和可視化數千兆字節的異質信息。它建立在NumPy庫的基礎上,借用了它的許多概念和語法約定,所以如果你對NumPy很熟悉,你會發現Pandas是一個相當熟悉的工具。即使你從未聽說過NumPy,Pandas也可以讓你在幾乎沒有編程背景的情況下輕松拿捏數據分析問題。

Pandas 給 NumPy 數組帶來的兩個關鍵特性是:

異質類型 —— 每一列都允許有自己的類型

索引 —— 提高指定列的查詢速度

事實證明,這些功能足以使Pandas成為Excel和數據庫的強大競爭者。

Polars[2]是Pandas最近的轉世(用Rust編寫,因此速度更快,它不再使用NumPy的引擎,但語法卻非常相似,所以學習 Pandas 后對學習 Polars 幫助非常大。

Pandas 圖鑒系列文章由四個部分組成:

Part 1. Motivation

Part 2. Series and Index

Part 3. DataFrames

Part 4. MultiIndex

我們將拆分成四個部分,依次呈現~建議關注和星標@公眾號:數據STUDIO,精彩內容等你來~

Part 1 Motivation

假設你有一個文件,里面有一百萬行逗號分隔的數值,像這樣:

圖片圖片

冒號后的空格僅用于說明問題。通常情況下,沒有空格。

而你需要用NumPy對 "哪些城市的面積超過450平方公里,人口低于1000萬" 這樣的基本問題給出答案。

通常情況下,不推薦使用將整個表送入NumPy數組的粗暴解決方案。NumPy數組是同質類型的(=所有的值都有相同的類型),所以所有的字段都會被解譯為字符串,在比大小方面也不盡人意。

雖然NumPy也有結構化數組和記錄數組,允許不同類型的列,但它們主要是為了與C代碼對接。當用于一般用途時,它們有以下缺點:

不太直觀(例如,你將面臨到處都是<f8和<U8這樣的常數);

與普通的NumPy數組相比,有一些性能問題;

在內存中連續存儲,所以每增加或刪除一列都需要對整個數組進行重新分配;

仍然缺乏Pandas DataFrames的很多功能。

如果將每一列存儲為一個單獨的NumPy向量。之后可以把它們包成一個dict,這樣,如果以后需要增加或刪除一兩行,就可以更容易恢復 "數據庫" 的完整性。下面是它的樣子:

圖片圖片

至此我們已經邁出了重新實現Pandas的第一步。

現在,下面有幾個例子來說明Pandas可以做一些NumPy不能做的事情(或者需要付出巨大努力才能完成)。

Pandas Showcase

如下表所示:

圖片圖片

它描述了一個網上商店的多樣化產品線,總共有四種不同的產品。與前面的例子相比,它既可以用NumPy數組表示,也可以用Pandas DataFrame表示,效果同樣不錯。但來看看它的一些常見操作。

1.Sorting

用Pandas按列排序更有可讀性,你可以看到如下:

圖片圖片

這里argsort(a[:,1])計算了使a的第二列以升序排序的排列方式,然后外部的a[...]相應地重新排列a的行。Pandas可以在一個步驟中完成。

2.按columns排序

如果我們需要使用權重列按價格列打破平局進行排序,那么對于NumPy來說卻有些糟糕:

圖片圖片

如果選擇使用NumPy,我們首先按重量排序,然后再按價格應用第二次排序。一個穩定的排序算法可以保證第一次排序的結果在第二次排序時不會丟失。用NumPy還有其他方法,但都不如用Pandas簡單和優雅。

3.增加一列

從語法和架構上來說,用Pandas添加列要好得多:

圖片圖片

Pandas不需要像NumPy那樣為整個數組重新分配內存;它只是為新的列添加一個引用,并更新一個列名的 registry。

4.快速元素搜索

對于NumPy數組,即使搜索的元素是第一個,仍然需要與數組大小成比例的時間來找到它。使用Pandas,可以對我們預期最常被查詢的列進行索引,并將搜索時間減少到On。

圖片圖片

索引欄有以下限制:

它需要記憶和時間來建立。

它是只讀的(在每次追加或刪除操作后需要重新建立)。

這些值不需要是唯一的,但只有當元素是唯一的時候才會發生加速。

它需要熱身:第一次查詢比NumPy慢一些,但隨后的查詢就明顯快了。

5.按列連接

如果想用另一個表的信息來補充一個基于共同列的表,NumPy幾乎沒有用。而Pandas更好,特別是對于1:n的關系。

圖片圖片

Pandas連接有所有熟悉的 inner, left, right, 和 full outer 連接模式。

6.按列分組

數據分析中另一個常見的操作是按列分組。例如,為了獲得每種產品的總銷售量,可以做如下操作:

圖片圖片

除了sum,Pandas還支持各種聚合函數:mean, max,min, count等等。

7.透視表

Pandas最強大的功能之一是 pivot 表。它類似于將多維空間投射到一個二維平面。

圖片圖片

雖然用NumPy當然可以實現。而Pandas也有df.pivot_table,它將分組和透視結合在一個工具中。

說到這里,你可能會想,既然Pandas這么好,為什么還會有人使用NumPy呢?NumPy沒有好壞之分,它只是有不同的使用情況:

  • 隨機數(例如,用于測試)
  • 線性代數(例如,用于神經網絡)。
  • 圖像和圖像堆疊(例如,用于CNN)。
  • 微分、積分、三角學和其他科學人員。

簡而言之,NumPy和Pandas的兩個主要區別如下:

圖片圖片

現在看看這些功能是否以性能的降低為代價。

Pandas的速度

下面對NumPy和Pandas的典型工作負載進行了基準測試:5-100列;103-10?行;整數和浮點數。下面是1行和1億行的結果:

圖片圖片

從測試結果來看,似乎在每一個操作中,Pandas都比NumPy慢!而這并不意味著Pandas的速度比NumPy慢!

當列的數量增加時,沒有什么變化。而對于行的數量,二者的對比關系(在對數尺度上)如下圖所示:

圖片圖片

對于小數組(百行以下),Pandas似乎比NumPy慢30倍,對于大數組(百萬行以上)則慢3倍。

怎么可能呢?我們提交一個功能請求,建議Pandas通過df.column.values.sum()重新實現df.column.sum()了?這里的values屬性提供了對底層NumPy數組的訪問,并帶來了3-30倍的速度提升。

答案是否定的。Pandas 在這些基本操作上是如此緩慢,因為它正確地處理了缺失值。在Pandas中,做了大量的工作來統一NaN在所有支持的數據類型中的用法。根據定義(在CPU層面上強制執行),nan+任何東西的結果都是nan。

所以在numpy中計算求和時:

>>> np.sum([1, np.nan, 2])
nan

但使用pandas計算求和時:

>>> pd.Series([1, np.nan, 2]).sum()
3.0

一個公平的比較是用np.nansum代替np.sum,np.nanmean代替np.mean,等等。突然間...

圖片圖片

對于超過一百萬元素的數組,Pandas變得比NumPy快1.5倍。對于較小的數組,它仍然比NumPy慢15倍,但通常情況下,操作在0.5毫秒或0.05毫秒內完成并不重要--反正是快了。

如果你100%確定你的列中沒有缺失值,那么使用df.column.values.sum()而不是df.column.sum()來獲得x3-x30的性能提升是有意義的。在存在缺失值的情況下,Pandas的速度是相當不錯的,對于巨大的數組(超過10?個元素)來說,甚至比NumPy還要好。

我們將連載個后續部分,敬請期待~

參考資料

[1]Pandas: https://pandas.pydata.org/

[2]Polars: https://www.pola.rs/

責任編輯:武曉燕 來源: 數據STUDIO
相關推薦

2023-08-01 12:57:42

PandasSeriesIndex

2017-11-02 13:20:08

數據處理PythonNumpy

2022-09-20 10:50:34

PandasNumPy

2020-03-10 08:55:50

PandasNumPy函數

2023-10-15 17:07:35

PandasPython庫

2023-06-12 00:36:28

迭代向量化Pandas

2022-07-06 06:17:51

PandasScipynumpy

2019-09-11 14:34:13

排序算法數據科學

2020-04-03 13:50:19

數據分析PandasNumPy

2020-06-04 10:49:53

Pandas字符串技巧

2021-01-13 11:13:46

ExcelPandas代碼

2021-07-07 09:50:23

NumpyPandasPython

2021-02-19 10:59:29

NumpyPandasPython

2018-04-03 12:07:53

數據清洗PandasNumpy

2023-09-08 13:11:00

NumPyPandasPython庫

2022-08-24 11:54:10

Pandas可視化

2023-08-11 11:19:52

數據集Merge函數

2022-09-05 08:04:16

mergeconcat?pandas

2019-11-01 10:49:21

技術開源應用

2019-12-25 14:08:50

Pandas數據計算
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 91国内精品久久 | 日本精品一区二区在线观看 | 91免费在线视频 | 少妇淫片aaaaa毛片叫床爽 | 日本精品一区二区 | 黄色小视频入口 | 91久久精品日日躁夜夜躁欧美 | 国产在线观看一区二区 | 日本a视频 | 久久久久亚洲 | 久草久草久草 | 毛片一区二区 | 免费一区| 国内精品视频在线 | 婷婷综合| www.久久久久久久久久久久 | 激情小视频 | 亚洲欧美成人 | 情侣av | 黄色片视频 | 日韩国产免费观看 | 成人亚洲视频 | 中文字幕在线看第二 | 中文字幕免费视频 | 国产日韩一区二区三区 | 国产一区二区三区在线 | 精品日韩一区 | 亚洲一区二区成人 | 欧美高清视频一区 | 午夜国产一区 | 亚洲性在线 | 久久久久国产一区二区三区不卡 | 国产亚洲一区二区在线观看 | 日韩欧美三区 | 羞羞网站在线免费观看 | 亚洲精品乱码 | 日韩欧美二区 | 久久久久国产一区二区 | 一本岛道一二三不卡区 | 久久久www成人免费无遮挡大片 | 天天综合久久 |