Python Pandas производительность фрейма данных: выбор диапазона по сравнению с двойным условием в индексированном фрейме данных - PullRequest
0 голосов
/ 27 апреля 2020

Я пытался найти наиболее эффективный способ выбора диапазона в pandas кадре данных для индекса строки (в моем случае использования в реальном мире это даты, которые я преобразовал в строку: было бы быстрее с pandas Дата-время?)

Настройка

import pandas as pd
import io
import time as t
df = pd.read_csv(io.StringIO(
"col,value\n\
a,1\n\
b,2\n\
c,3\n\
d,1\n\
e,2\n\
f,3\n\
g,1\n\
h,2\n\
i,3\n\
j,1\n\
k,2\n\
l,3\n\
m,1\n\
n,2\n\
p,3"
))
df.index = df['col']
num_runs=1000

И 3 теста:

# solution 1
start = t.process_time()
for i in range(0,num_runs):
    df.loc["a":"j"]
end = t.process_time()
print(f"1: {1e4*(end-start)/num_runs:.2f}m")
#solution 2
start = t.process_time()
for i in range(0,num_runs):
    df[(df.index >= "a")& (df.index <= "j" )]
end = t.process_time()
print(f"2: {1e4*(end-start)/num_runs:.2f}m")
#solution 3
start = t.process_time()
for i in range(0,num_runs):
    df[(df["col"] >= "a") & (df["col"] <= "j")]
end = t.process_time()
print(f"3: {1e4*(end-start)/num_runs:.2f}m")

Вывод:

1: 1.56m
2: 5.00m
3: 8.75m

Я так понимаю почему 3 намного медленнее, чем другие 2, но я не уверен, что понимаю, почему 1 и 2 так сильно отличаются.

Любой гуру питона / pandas, чтобы пролить свет? Кроме того, если есть еще более эффективный способ, я, конечно, все уши.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...