我有一个从字典列表创建的 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)