加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

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

发布时间:2020-12-20 13:18:44 所属栏目:Python 来源:网络整理
导读:我有一个大约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 np
import pandas as pd
import timeit,random

df = 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.1583892970229499
0.05918855100753717

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

参考:1

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读