python – pandas的速度df.loc [x,’column’]

python – pandas的速度df.loc [x,’column’],第1张

概述我有一个大约100行的pandas DataFrame,我需要以有效的方式从列中为给定索引选择值.目前我正在使用df.loc [index,’col’],但这似乎相对较慢: df = pd.DataFrame({'col': range(100)}, index=range(100)) %timeit df.loc[random.randint(0, 99), 'col']#100000 我有一个大约100行的pandas DataFrame,我需要以有效的方式从列中为给定索引选择值.目前我正在使用df.loc [index,’col’],但这似乎相对较慢:

df = pd.DataFrame({'col': range(100)},index=range(100))    %timeit df.loc[random.randint(0,99),'col']#100000 loops,best of 3: 19.3 µs per loop

什么似乎更快(约10倍)是将数据框转换为字典,然后查询:

d = df.to_dict()    %timeit d['col'][random.randint(0,99)]#100000 loops,best of 3: 2.5 µs per loop

有没有办法在没有明确创建字典的情况下使用普通数据框方法获得类似的性能?我应该使用.loc以外的东西吗?

或者这只是我最好使用这种解决方法的情况?

解决方法 如果要考虑有效性,那么Numpy数组可能是比熊猫数据帧更好的选择.我尝试重现您的示例以衡量效率比较:

import numpy as npimport pandas as pdimport timeit,randomdf = pd.DataFrame({'col': range(100)},index=range(100)) print(timeit.timeit('df.loc[random.randint(0,"col"]',number=10000,globals=globals()))ds_numpy = np.array(df)print(timeit.timeit('ds_numpy[ds_numpy[random.randint(0,99)]]',globals=globals()))

结果:

$python test_pandas_vs_numpy.py 0.15838929702294990.05918855100753717

在这种情况下,看起来比使用Numpy数组而不是pandas数据帧在性能方面是优势.

参考:1

总结

以上是内存溢出为你收集整理的python – pandas的速度df.loc [x,’column’]全部内容,希望文章能够帮你解决python – pandas的速度df.loc [x,’column’]所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1196338.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-03
下一篇 2022-06-03

发表评论

登录后才能评论

评论列表(0条)

保存