La configuración de valores en el subconjunto Pandas DataFrame (copia) es lenta

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)) 

En mi computadora portátil, los valores de configuración en dft (el subconjunto original) son aproximadamente 160 veces más lentos que los valores de configuración en dft2 (una copia en profundidad de dft ).

¿Por qué es este el caso?

Editar : Se eliminó la especulación sobre los objetos proxy.

Como c. leather sugiere, esto es probable debido a una ruta de código diferente al configurar los valores en una copia ( dft ) frente a un dataframe original ( dft2 ).

Pregunta extra: al eliminar la referencia al DataFrame df original (al descomentar la línea df = dft ), se reduce el factor de velocidad a aproximadamente 2 en mi computadora portátil. ¿Alguna idea de por qué este es el caso?

Esta no es exactamente una nueva pregunta sobre SO. Esto , y esto son publicaciones relacionadas. Este es el enlace a la documentación actual que lo explica.

Los comentarios de @c.leather están en el camino correcto. El problema es que dft es una vista, no una copia del df dataframe, como se explica en los artículos vinculados. Pero los pandas no pueden saber si realmente es o no una copia y si la operación es segura o no, y como tal hay muchos controles que se realizan para garantizar que sea seguro realizar la tarea, y eso podría evitarse simplemente haciendo una copia.

Este es un tema pertinente y hay una discusión completa en Github . He visto muchas sugerencias, la que más me gusta es que los documentos deberían fomentar el idioma df[[True,False] * 5].copy() , se puede llamar el idioma de corte y copia.

No pude encontrar las comprobaciones exactas, y en el problema de github este matiz de rendimiento solo se menciona a través de algunos tweets que algunos desarrolladores publicaron notando el comportamiento. Tal vez alguien más involucrado en el desarrollo de los pandas pueda agregar algo más de información.