Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在熊猫中快速访问一行的一部分_Python_Performance_Pandas - Fatal编程技术网

Python 在熊猫中快速访问一行的一部分

Python 在熊猫中快速访问一行的一部分,python,performance,pandas,Python,Performance,Pandas,我正在做200亿次计算,结果表明,最慢的两个数量级的步骤就是访问数据帧中的相关行 %timeit x = query_results.ix[i] 10000 loops, best of 3: 155 µs per loop 我们怎么能把速度降低一两个数量级呢 此数据帧有200000行和11列,所有字符串的长度各不相同。将字符串设置为固定长度几乎不会影响访问速度。使这些值浮动(这在本用例中是不可行的)将使速度降低大约一半 编辑以了解更多上下文: 这大致就是整个用例,使用BrenBarn的建议使

我正在做200亿次计算,结果表明,最慢的两个数量级的步骤就是访问数据帧中的相关行

%timeit x = query_results.ix[i]
10000 loops, best of 3: 155 µs per loop
我们怎么能把速度降低一两个数量级呢

此数据帧有200000行和11列,所有字符串的长度各不相同。将字符串设置为固定长度几乎不会影响访问速度。使这些值浮动(这在本用例中是不可行的)将使速度降低大约一半

编辑以了解更多上下文: 这大致就是整个用例,使用BrenBarn的建议使用
iloc
而不是
ix
。请注意,我们一次只能访问两行。大量的计算来自于将每一行与每一行进行比较(200000^2/2)

如果这个数字能更接近5µs,那就太棒了


旁注,作为每个µs计数的示例:并非每个单元格都包含数据,因此我仍然需要从结果数据中删除缺少的值(
nan
),这将需要更多的µs。在这些方面,像test.iloc[i].dropna()这样的操作非常慢。

你在做什么样的索引?您可以通过使用
.iloc
.loc
获得加速,但这取决于您的索引方式(使用单个索引标签、单个数字索引、其中任何一个的列表等)。此外,执行此索引将创建一个新的数据帧,因此如果您选择了大量行,则速度会很慢(因为它必须创建一个大的数据帧)。如何对此进行优化取决于您对结果所做的操作。同意如果您提取单个值
。iat
。at
可能会提供一些速度。请在上面编辑以获取更多上下文。为什么要对基础数据使用索引,例如
df.values
?您似乎没有使用任何索引功能。使用索引器并不意味着像您这样重复访问(因为它们需要大量的验证)。是的。请记住,在混合数据类型帧上,这是一个非常重要的操作(值
.values
,因此不要在循环中执行)
In [21]: tx = test.values

In [22]: tx
Out[22]: 
array([['asdfasdf', 'asdfasdf', 'asdfasdf', ..., 'asdfasdf', 'asdfasdf',
        'asdfasdf'],
       ['asdfasdf', 'asdfasdf', 'asdfasdf', ..., 'asdfasdf', 'asdfasdf',
        'asdfasdf'],
       ['asdfasdf', 'asdfasdf', 'asdfasdf', ..., 'asdfasdf', 'asdfasdf',
        'asdfasdf'],
       ..., 
       ['asdfasdf', 'asdfasdf', 'asdfasdf', ..., 'asdfasdf', 'asdfasdf',
        'asdfasdf'],
       ['asdfasdf', 'asdfasdf', 'asdfasdf', ..., 'asdfasdf', 'asdfasdf',
        'asdfasdf'],
       ['asdfasdf', 'asdfasdf', 'asdfasdf', ..., 'asdfasdf', 'asdfasdf',
        'asdfasdf']], dtype=object)

In [23]: %timeit x = set(tx[i]).intersection(tx[j])
100000 loops, best of 3: 1.99 µs per loop
In [21]: tx = test.values

In [22]: tx
Out[22]: 
array([['asdfasdf', 'asdfasdf', 'asdfasdf', ..., 'asdfasdf', 'asdfasdf',
        'asdfasdf'],
       ['asdfasdf', 'asdfasdf', 'asdfasdf', ..., 'asdfasdf', 'asdfasdf',
        'asdfasdf'],
       ['asdfasdf', 'asdfasdf', 'asdfasdf', ..., 'asdfasdf', 'asdfasdf',
        'asdfasdf'],
       ..., 
       ['asdfasdf', 'asdfasdf', 'asdfasdf', ..., 'asdfasdf', 'asdfasdf',
        'asdfasdf'],
       ['asdfasdf', 'asdfasdf', 'asdfasdf', ..., 'asdfasdf', 'asdfasdf',
        'asdfasdf'],
       ['asdfasdf', 'asdfasdf', 'asdfasdf', ..., 'asdfasdf', 'asdfasdf',
        'asdfasdf']], dtype=object)

In [23]: %timeit x = set(tx[i]).intersection(tx[j])
100000 loops, best of 3: 1.99 µs per loop