Python Pandas to_csv в 20 раз медленнее со столбцом типа period [D] - PullRequest
1 голос
/ 02 апреля 2019

Я заметил изменение производительности в одном из моих сценариев, который использует Pandas to_csv для записи набора данных в файл. В частности, при написании длинного csv (@ 1 mil строк разница очень выражена) со столбцом типа Period [D], производительность очень плохая. Удаление столбца или преобразование его в строку с помощью apply приводит к тому, что он работал как прежде.

В моей среде недавно произошли два изменения: окна 7 для окон 10 и панды 23.xx (я полагаю) для панд 24.2

Ниже приведен простой пример моей проблемы:

import pandas as pd, os, numpy as np
file_path = r'<file path here>'
df_period = pd.DataFrame(data={"ints":np.random.randint(0,100000000,(1000000)), "days": pd.period_range("2012-01-01", periods=1000000, freq="D")})
df_strings = df_period.copy()
df_strings["days"] = df_strings["days"].apply(lambda x: str(x))
%timeit df_strings.to_csv(os.path.join(file_path, "strings_test.csv"))
1 loop, best of 3: 1.55 s per loop
%timeit df_period.to_csv(os.path.join(file_path, "period_test.csv"))
1 loop, best of 3: 33.1 s per loop

Производительность в 20 раз выше для 1 миллиона строк этого примера набора данных при удалении столбца или преобразовании его сначала в строки. Эта разница менее выражена, но все еще присутствует в 100 тыс. Строк. Почему это происходит?

При ручном прерывании медленного вызова to_csv я обычно видел сценарий, выполняющий следующую функцию:

return lambda x: Period._from_ordinal(ordinal=x, freq=self.freq)

Что-то изменилось в пандах 24.xx, что вызвало снижение производительности?

...