Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/141.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_Pandas_Dataframe - Fatal编程技术网

Python 从数据框中选择行的最快方法?

Python 从数据框中选择行的最快方法?,python,pandas,dataframe,Python,Pandas,Dataframe,我有一个熊猫数据帧df,有数百万行,列A1,…,一个 选择行的最快方法是什么,以便df['A1']==30 编辑:至少有三种方法: 方法1df[(df['A1']==30)] 方法2测向查询('A1==30') 方法3。Dodf=df。设置索引(A1)一次;然后df.loc[30](或者df.loc[x]对于我们试图在A1列中找到的所有x值) 利与弊是什么?5000万行52列 from string import ascii_letters df = pd.DataFrame(np.rando

我有一个熊猫数据帧df,有数百万行,列A1,…,一个

选择行的最快方法是什么,以便
df['A1']==30

编辑:至少有三种方法:

  • 方法1<代码>df[(df['A1']==30)]
  • 方法2<代码>测向查询('A1==30')
  • 方法3。Do
    df=df。设置索引(A1)
    一次;然后
    df.loc[30]
    (或者
    df.loc[x]
    对于我们试图在A1列中找到的所有x值)

  • 利与弊是什么?

    5000万行52列

    from string import ascii_letters
    
    df = pd.DataFrame(np.random.randint(50, size=(50000000, 52)), columns=list(ascii_letters))
    
    多种方法

    %timeit df[df.B == 30]
    %timeit df[df.B.values == 30]
    %timeit df.query('B == 30')
    
    1 loop, best of 3: 31.4 s per loop
    1 loop, best of 3: 31.6 s per loop
    1 loop, best of 3: 27.1 s per loop
    
    使用
    numexpr

    import numexpr as ne
    
    %%timeit
    B = df.B.values
    df[ne.evaluate('B == 30')]
    
    1 loop, best of 3: 22.8 s per loop
    
    %%timeit
    B = df.B.values
    mask = ne.evaluate('B == 30')
    pd.DataFrame(df.values[mask], df.index[mask], df.columns)
    
    1 loop, best of 3: 21.4 s per loop
    
    或者除了
    numexpr

    import numexpr as ne
    
    %%timeit
    B = df.B.values
    df[ne.evaluate('B == 30')]
    
    1 loop, best of 3: 22.8 s per loop
    
    %%timeit
    B = df.B.values
    mask = ne.evaluate('B == 30')
    pd.DataFrame(df.values[mask], df.index[mask], df.columns)
    
    1 loop, best of 3: 21.4 s per loop
    
    你看过了吗。从这里你会看到,你从

    df.query('A1==30')
    
    该链接中有更多信息,但我相信这是最容易实现的