Я впервые задаю вопрос.
Я работаю с большим набором данных CSV (он содержит более 15 миллионов строк и имеет размер более 1,5 ГБ).
Iзагружаю выдержки в кадры данных Pandas, работающие в Jupyter Notebooks, чтобы получить алгоритм, основанный на наборе данных.Я группирую данные по MAC-адресу, в результате чего получается более 1 миллиона групп.
Основой для разработки моего алгоритма является выполнение этой операции:
pandas.core.groupby.DataFrameGroupBy.filter
Выполнение этой операции занимает от 3 до 5 минут,в зависимости от набора данных.Чтобы разработать этот алгоритм, я должен выполнить эту операцию сотни, возможно, тысячи раз.
Эта операция связана с процессором и использует только одно из нескольких ядер, доступных на моей машине.Я провел несколько часов, исследуя потенциальные решения онлайн.Я пытался использовать как numba
, так и dask
, чтобы ускорить эту операцию, и обе попытки привели к исключениям.
Numba предоставил сообщение о том, что «этого не должно было случиться, спасибо за помощьулучшить продукт ».Dask, по-видимому, может не реализовывать операцию DataFrameGroupBy.filter.Я не мог определить, как переписать мой код для использования pool
/ map
.
Я ищу предложения по ускорению этой операции:
pandas.core.groupby.DataFrameGroupBy.filter
Здесьэто пример этой операции в моем коде.Существуют и другие примеры, которые, похоже, имеют примерно одинаковое время выполнения.
import pandas as pd
def import_data(_file, _columns):
df = pd.read_csv(_file, low_memory = False)
df[_columns] = df[_columns].apply(pd.to_numeric, errors='coerce')
df = df.sort_values(by=['mac', 'time'])
# The line below takes ~3 to 5 minutes to run
df = df.groupby(['mac']).filter(lambda x: x['latency'].count() > 1)
return df
Как я могу ускорить это?