gpt4 book ai didi

python - Pandas 数据帧性能

转载 作者:太空宇宙 更新时间:2023-11-03 21:24:25 26 4
gpt4 key购买 nike

Pandas 确实很棒,但我真的很惊讶从 Pandas.DataFrame 检索值的效率是多么低下。在下面的玩具示例中,即使是 DataFrame.iloc 方法也比字典慢 100 倍以上。

问题:这里的教训是否只是字典是查找值的更好方法?是的,我知道这正是它们的用途。但我只是想知道 DataFrame 查找性能是否缺少一些东西。

我意识到这个问题比“询问”更“沉思”,但我会接受对此提供见解或观点的答案。谢谢。

import timeit

setup = '''
import numpy, pandas
df = pandas.DataFrame(numpy.zeros(shape=[10, 10]))
dictionary = df.to_dict()
'''

f = ['value = dictionary[5][5]', 'value = df.loc[5, 5]', 'value = df.iloc[5, 5]']

for func in f:
print func
print min(timeit.Timer(func, setup).repeat(3, 100000))

value = dictionary[5][5]

0.130625009537

value = df.loc[5, 5]

19.4681699276

value = df.iloc[5, 5]

17.2575249672

最佳答案

字典之于 DataFrame 就像自行车之于汽车一样。你骑自行车行驶 10 英尺的速度比你启动汽车、挂档等等的速度要快。但如果你需要行驶一英里,汽车就会获胜。

对于某些小的、有针对性的目的,字典可能会更快。如果这就是您所需要的,那么当然使用字典!但如果您需要/想要 DataFrame 的功能和奢华,那么字典是无法替代的。如果数据结构不能首先满足您的需求,那么比较速度是没有意义的。

例如,更具体地说,字典对于访问列很有用,但对于访问行就不那么方便了。

import timeit

setup = '''
import numpy, pandas
df = pandas.DataFrame(numpy.zeros(shape=[10, 1000]))
dictionary = df.to_dict()
'''

# f = ['value = dictionary[5][5]', 'value = df.loc[5, 5]', 'value = df.iloc[5, 5]']
f = ['value = [val[5] for col,val in dictionary.items()]', 'value = df.loc[5]', 'value = df.iloc[5]']

for func in f:
print(func)
print(min(timeit.Timer(func, setup).repeat(3, 100000)))

产量

value = [val[5] for col,val in dictionary.iteritems()]
25.5416321754
value = df.loc[5]
5.68071913719
value = df.iloc[5]
4.56006002426

因此列表字典在检索行时比 df.iloc 慢 5 倍。随着列数的增加,速度不足变得更大。 (列数就像自行车类比中的英尺数。距离越长,汽车变得越方便......)

这只是列表字典不如 DataFrame 方便/慢的一个例子。

另一个示例是当您有一个 DatetimeIndex 行并希望选择特定日期之间的所有行时。通过 DataFrame,您可以使用

df.loc['2000-1-1':'2000-3-31']

如果您要使用列表字典,则没有简单的类比。与 DataFrame 相比,您需要用来选择正确行的 Python 循环又会非常慢。

关于python - Pandas 数据帧性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53957599/

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