Python Pandas 性能

标签 python performance pandas

有人告诉我,如果你在 python 中循环,你就做错了什么,我倾向于同意这一点,所以我做了一些性能。对我的程序进行分析,结果令我感到惊讶:

我正在尝试使用 dropna() 检索 pandas 系列的非 Nan 数据的索引,它似乎比循环慢:

from pandas import Series
import numpy as np
import timeit

def test1():
    s = Series([25.9,25.8,np.nan,34.8],index=['a','b','c','d'])
    return s.dropna().index

def test2():
    s = Series([25.9,25.8,np.nan,34.8],index=['a','b','c','d'])
    res = []
    for i in s.index:
        if not np.isnan(s[i]):
            res.append(i)
    return res


>>> timeit.timeit(test1,number=10000)
1.931797840017623
>>> timeit.timeit(test2,number=10000)
1.602180508842423

我在这里遗漏了什么吗?或者只是因为我返回一个数组而不是 pandas 索引?

提前致谢

最佳答案

这些是非常小系列。尝试使用更大的:

In [11]: s = pd.Series([25.9,25.8,np.nan,34.8] * 1000)

In [12]: %timeit [i for i in s.index if not np.isnan(s[i])]
10 loops, best of 3: 34.9 ms per loop

In [13]: %timeit s.dropna().index
10000 loops, best of 3: 106 µs per loop

注意:我使用了列表理解,它可能比您的实现稍快。

关于Python Pandas 性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22191176/

相关文章:

python - Azure Batch NodePreparationError 尝试从 Azure 容器注册表获取 Docker 镜像

python - 当我尝试在 linux 中使用 f.open python 更改它们时,内容会重复

java - 如何提高对数据库进行多次调用的Java应用程序的性能?

python - 在循环中选择数据框的列

python - 如何正确写出 Pandas 系列中的 TSV 文件?

Python:非阻塞+非失效进程

python - 导入任意 python 源文件。 (Python 3.3+)

android - 从android上的sqlite获取数据真的很慢

python - Python调用C函数的效率

python - 使用 Pandas 计算日期时间行平均值的最快方法