当前位置: 首页 > 面试题库 >

pandas数据框:位置与查询性能

苏乐
2023-03-14
问题内容

我在python中有2个数据框,我想查询数据。

  • DF1:4M记录x 3列。查询函数比loc函数更有效。

  • DF2:2K记录x 6列。loc函数的接缝比查询函数更有效。

这两个查询都返回一条记录。通过将相同的操作循环运行10K次来完成仿真。

运行python 2.7和pandas 0.16.0

有什么建议可以提高查询速度?


问题答案:

为了提高性能,可以使用numexpr

import numexpr

np.random.seed(125)
N = 40000000
df = pd.DataFrame({'A':np.random.randint(10, size=N)})

def ne(df):
    x = df.A.values
    return df[numexpr.evaluate('(x > 5)')]
print (ne(df))

In [138]: %timeit (ne(df))
1 loop, best of 3: 494 ms per loop

In [139]: %timeit df[df.A > 5]
1 loop, best of 3: 536 ms per loop

In [140]: %timeit df.query('A > 5')
1 loop, best of 3: 781 ms per loop

In [141]: %timeit df[df.eval('A > 5')]
1 loop, best of 3: 770 ms per loop
import numexpr
np.random.seed(125)

def ne(x):
    x = x.A.values
    return x[numexpr.evaluate('(x > 5)')]

def be(x):
    return x[x.A > 5]

def q(x):
    return x.query('A > 5')

def ev(x):
    return x[x.eval('A > 5')]


def make_df(n):
    df = pd.DataFrame(np.random.randint(10, size=n), columns=['A'])
    return df


perfplot.show(
    setup=make_df,
    kernels=[ne, be, q, ev],
    n_range=[2**k for k in range(2, 25)],
    logx=True,
    logy=True,
    equality_check=False,  
    xlabel='len(df)')

图形



 类似资料:
  • 问题内容: 我没有为此使用模拟位置…实际上,上周代码运行良好。 我有一个可收集GPS数据并使用该应用程序本身生成的X,Y坐标显示Google地图链接的应用程序。我不是100%知道为什么它无法正常运行,但是当我请求该应用根据手机提供的GPS位置建立一个Google地图链接时,它告诉我距离我的位置有5-6个街区起源(当时我实际所在的位置)不完全是我想要的 已知: 我已设置适当的权限 上周所有代码正常工

  • 问题内容: 我有一个Pandas数据框,我想在该数据框中找到所有唯一的值…与行/列无关。如果我有一个10 x 10的数据框,并假设它们具有84个唯一值,则需要找到它们-而不是计数。 我可以创建一个集合并通过遍历数据框的行来添加每行的值。但是,我觉得它可能效率很低(无法证明这一点)。有没有找到它的有效方法?有预定义的功能吗? 问题答案: 小块独特的排序,因此以这种方式更快地进行排序(然后根据需要排序

  • 我是Python的新手 我想在pandas数据帧中找到某个值的索引(比如说),因为这是列的起始位置。(列上方的行数未知,数据不相关,左侧的“列”为空。) 据我所知,isin方法只返回值是否存在的布尔值,而不是其索引。 如何找到该值的索引?

  • 问题内容: 我有一个数据框,类似: 我想在数据框的末尾添加一个“总计”行: 我尝试使用该命令,但最终得到一个Series,尽管可以将其转换回Dataframe,但它不维护数据类型: 我想维护原始数据帧中的数据类型,因为我需要对总行应用其他操作,例如: 问题答案: 将总计行附加到 仅当您有一列字符串或对象时,才需要进行转换。 这是一个脆弱的解决方案,因此我建议仍然坚持对数据框进行操作。例如。

  • 我正在使用JAVAFX over JAVA8构建一个应用程序。在我的应用程序中,我有一个数据网格,应该填充来自数据库的结果集。但是,查询可能需要一段时间,在此之前我不希望GUI处于空闲状态。 对于这种问题,最好的线程架构是什么? 我考虑对查询本身使用Task,然后将结果放在数据网格中。然而,主UI线程不允许其他线程接触对象。如果我只是等待线程结束,它就会变成一个同步进程(我想避免这种情况) 有什么

  • 在我的应用程序中,我通过单击按钮将FusedLocationProviderClient的坐标存储到数据库中。问题是,当我重新启动手机或模拟器时,为空,我必须再次单击我订购的按钮才能使其工作。如果是否为空? 在我的按钮处理程序中,我调用,并使用纬度、经度和精度存储到数据库中。 任何帮助赞赏!