小编noa*_*amk的帖子

Pandas:从数据框中选择时速度很慢

我有一个从字典列表创建的 DataFrame,它是从数据库中获取的。我正在尝试将其用作内存数据库,我使用以下函数进行查询:

def filter_entities(df, name1, name2):
    key = ((df.name1 == name1) &
           (df.name2 == name2))

    rows = df.loc[key]
    if len(rows) == 0:
        return None
    return rows.iloc[0]
Run Code Online (Sandbox Code Playgroud)

这样做似乎比我预期的要慢得多。即使对几百行进行测试,每次调用也需要大约 1 毫秒。我在创建数据框时尝试在这些列上设置索引,但它没有影响性能:

entities.set_index(['name1', 'name2'], drop=False, inplace=True)
Run Code Online (Sandbox Code Playgroud)

这是创建用于测试的数据集的快速方法:

import random, string
import pandas as pd
df = pd.DataFrame([{
   'name1': ''.join([random.choice(string.letters) for i in range(10)]),
   'name2': ''.join([random.choice(string.letters) for i in range(10)]),
   'val1': random.randint(0, 2**16),
   'val2': random.randint(0, 2**16),
   'val3': random.randint(0, 2**16),
   } for j in range(1000)])

In[27]: %timeit filter_entities(df, df['name1'][100], df['name2'][100])
1000 loops, best of 3: …
Run Code Online (Sandbox Code Playgroud)

python pandas

5
推荐指数
1
解决办法
5773
查看次数

标签 统计

pandas ×1

python ×1