Почему время обработки увеличивается при использовании целочисленного типа данных вместо строк в pandas - PullRequest
1 голос
/ 15 февраля 2020

У меня есть список кортежей с более чем 0,8 миллионами записей, пример которых показан ниже

[('r', 'b', '>', 'ins'),
 ('r', 'ba', '>', 'ins'),
 ('r', 'a', '>', 'del'),
 ('ar', 'b', '>', 'ins'),
 ('ar', 'ba', '>', 'del')]

Приведенный выше список преобразуется в Pandas фрейм данных, а затем в некоторую последующую группировку. и агрегатные операции над ним выполняются, как показано ниже

conDF = pd.DataFrame.from_records(tripleeList)
conDF.columns = ["lc","obj","rc","insOrDel"]
conDF["coun"] = 1
groupedConDF = conDF.groupby(["lc","rc","obj","insOrDel"]).count()

Замечено, что если последний элемент в каждом кортеже представлен с использованием целого числа (скажем, с 1 и 0) вместо использования строк "ins «и» del, то время обработки в 10 раз превышает то, что требуется в настоящее время. Я использовал %%time magi c в блокноте jupyter для получения показателей.

Время, сообщаемое при использовании строк

CPU times: user 459 ms, sys: 24.4 ms, total: 484 ms
Wall time: 481 ms

Время, сообщаемое при использовании целых чисел

CPU times: user 5.77 s, sys: 410 ms, total: 6.18 s
Wall time: 604 ms

Обновлено

При изменении кода в соответствии с предложением @jezrael сообщается следующее

Строки:

CPU times: user 966 ms, sys: 45.9 ms, total: 1.01 s
Wall time: 431 ms

Целое число:

CPU times: user 5.72 s, sys: 375 ms, total: 6.09 s
Wall time: 558 ms

Модифицированный код:

conDF = pd.DataFrame.from_records(tripleeList)
conDF.columns = ["lc","obj","rc","insOrDel"]
conDF["coun"] = 1
groupedConDF = conDF.groupby(["lc","rc","obj","insOrDel"], sort=False).size()

Что может быть причиной этого?

...