import timeit
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.rand(10, 10))
dft = df[[True, False] * 5]
# df = dft
dft2 = dft.copy()
new_data = np.random.rand(5, 10)
print(timeit.timeit('dft.loc[:, :] = new_data', setup='from __main__ import dft, new_data', number=100))
print(timeit.timeit('dft2.loc[:, :] = new_data', setup='from __main__ import dft2, new_data', number=100))
Значения параметров моего ноутбука в dft
(исходное подмножество) примерно в 160 раз медленнее, чем значения в dft2
(глубокая копия dft
).
Почему это так?
Изменить: удалены спекуляции о прокси-объектах.
Как c. кожа предполагает, что это, вероятно, связано с другой кодировкой при установке значений на копии (dft
) по сравнению с исходным фреймворком данных (dft2
).
Бонусный вопрос: удалив ссылку на исходный DataFrame df
(раскомментируя строку df = dft
), сокращает коэффициент скорости примерно до 2 на моем ноутбуке. Любая идея, почему это так?