🐼 Я уверен, что вы все использовали методы
Pandas .iloc и .loc,которые позволяют нарезать 🔪 данные. Но задумывались ли вы когда-нибудь, какой из них быстрее? Давайте выясним! 🕵️♂️🦄 Сначала давайте создадим два
DataFrame для сравнения методов:# импортируем необходимые библиотеки
import pandas as pd
import numpy as np
# Создаем данные со значениями от 0 до 100 и размеренностью 100_000 на 5
data = np.random.randint(0, 100, size=(100000, 5))
# Создаем DataFrame и даем название столбцами
df = pd.DataFrame(data, columns=list('ABCDE'))
⚖️ За меру возьмем срез от 0 до 500 индекса:
rows = range(0, 500)
🪄 С помощью magic word timeit сравним скорость выполнения методов:
%timeit df.iloc[rows]
67.9 µs ± 219 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)
%timeit df.loc[rows]
169 µs ± 1.52 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)
🏎️ .iloc оказался в в 2.5 раза быстрее, чем .loc. в данном случае. Это потому что .iloc использует индексацию на основе целых чисел, тогда как .loc использует индексацию на основе меток. 🔢 Поскольку наш индекс является диапазоном целых чисел, то .
iloc может воспользоваться этим преимуществом и показать хорошие результаты. 📍Однако, если вы работаете с DataFrame, который в качестве индексов использует метки, то .
loc может оказаться быть быстрее.📚Задание: попробуйте сравнить данные методы в других условиях и поделитесь результатами.
🧸 В комментариях буду теперь прикладывать код в формате .
ipynb, чтобы Вам было удобнее. #pandas