簡體   English   中英

為什么Pandas DataFrame比numpy ndarray更昂貴?

[英]Why is pandas DataFrame more expensive than numpy ndarray?

我正在對pandas DataFrame創建進行基准測試,發現它比numpy ndarray創建更昂貴。

基准代碼

from timeit import Timer
setup = """
import numpy as np
import pandas as pd
"""
numpy_code = """
data = np.zeros(shape=(360,),dtype=[('A', 'f4'),('B', 'f4'),('C', 'f4')])
"""
pandas_code ="""
df =pd.DataFrame(np.zeros(shape=(360,),dtype=[('A', 'f4'),('B', 'f4'),('C', 'f4')]))
"""
print "Numpy",min(Timer(numpy_code,setup=setup).repeat(10,10))*10**6,"micro-seconds"
print "Pandas",min(Timer(pandas_code,setup=setup).repeat(10,10))*10**6,"micro-seconds"

輸出是

Numpy 17.5073728315 micro-seconds
Pandas 1757.9817013 micro-seconds

我想知道是否有人可以幫助我理解為什么pandas DataFrame創建比ndarray構建更昂貴。 如果我做錯了什么,請您幫我改善性能。

系統詳情

pandas version: 0.12.0
numpy version: 1.9.0
Python 2.7.6 (32-bit) running on Windows 7

對於完全同質的dtyped numpy數組,創建時的性能差異非常小,並且不進行任何復制,並且該數組僅通過傳遞。

但是,對於異類dtyped numpy數組,數據按dtype(可能涉及復制,尤其是如果您的輸入具有不連續的dtype,則可能涉及復制)分隔到單獨的塊中,每個塊中都包含一個dtype(作為numpy數組)。

其他類型的數據觸發不同數量的檢查(例如,檢查列表是否為1-d,2-d等),並且會發生與日期時間樣的強制有關的各種檢查。

提前進行dtype分離的原因很簡單。 然后,您可以對不同的dtype執行不同的操作,而無需運行時分離(以及相應的切片性能問題)。

老實說,要獲得使用DataFrame的所有附帶優勢,這是非常非常小的嘗試,即一致的直觀API,可以正確地智能處理空數據和不同的dtype。

同質,不涉及復制

In [41]: %timeit np.ones((10000,100))
1000 loops, best of 3: 399 us per loop

In [42]: arr = np.ones((10000,100))

In [43]: %timeit DataFrame(arr)
10000 loops, best of 3: 65.9 us per loop

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM