Часто ли вам приходилось работать с большими pandas-датафреймами? Если их размер достигает порядка нескольких миллионов строк, то время выполнения элементарных операций становится ощутимым😒
Дело в том, что pandas использует только одно ядро вашего компьютера, даже если доступно несколько. Поэтому можно в разы ускорить процесс обработки данных, если его распараллелить - в этом помогает библиотека
Pandarallel, ловите несколько примеров её применения🐈🐈🐈✨ Первым делом необходимо "включить" библиотеку: чтобы использовать все доступные процессоры, просто запустите
from pandarallel import pandarallel
pandarallel.initialize(progress_bar=True))
✨ Метод parallel_apply - "параллельный" аналог apply:
df = pd.DataFrame({
'A': range(1, 1000001),
'B': range(1000001, 2000001)})
def my_func1(row):
return row['A'] + row['B']
df['C'] = df.parallel_apply(my_func1, axis=1)
✨ Подобие map из библиотеки называется parallel_map:
def my_func2(x):
return x * 2
df['D'] = df['C'].parallel_map(my_func2)
✨ И, наконец, "пареллельная" реализация groupby осуществляется также через parallel_apply:
df = pd.DataFrame({
'A': ['foo', 'bar', 'foo', 'bar', 'foo', 'bar', 'foo', 'bar'],
'B': ['one', 'one', 'two', 'two', 'one', 'one', 'two', 'two'],
'C': range(1, 9)
})
result = (
df.groupby(['A', 'B'])
.parallel_apply(lambda x: x.sum()
)
Попробуйте запустить примеры на больших данных и сравнить скорость🏃♂️
Официальный репозиторий тут 😎
#аналитика@data_easy
#classic_ml@data_easy