gpt4 book ai didi

python - 为什么 pandas DataFrame 比 numpy ndarray 贵?

转载 作者:太空宇宙 更新时间:2023-11-04 08:59:52 24 4
gpt4 key购买 nike

我正在对 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)分离到单独的 block 中,每个 block 包含一个 dtype(作为 numpy 数组)。

其他类型的数据会触发不同数量的检查(例如,会仔细检查列表是否是一维、二维等),并且会发生与 datetime-likes 强制相关的各种检查。

这种预先 dtype 分离的原因很简单。然后,您可以执行对不同数据类型进行不同操作的操作,而无需运行时分离(以及相应的切片性能问题)。

老实说,为了获得使用 DataFrame 的所有附带优势,这是一个非常非常轻微的性能损失,即一个一致的直观 API,可以智能地正确处理空数据和不同的数据类型。

同类案例,这不涉及复制

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

关于python - 为什么 pandas DataFrame 比 numpy ndarray 贵?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26551141/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com