¿Cuál es la mejor manera de crear un marco de datos de pandas lleno de ceros de un tamaño determinado?
He usado:
zero_data = np.zeros(shape=(len(data),len(feature_list)))
d = pd.DataFrame(zero_data, columns=feature_list)
Hay una mejor manera de hacerlo?
data
? ¿Por qué necesitas crear otra estructura para sostenerlo?Respuestas:
Puedes probar esto:
fuente
%timeit temp = np.zeros((10, 11)); d = pd.DataFrame(temp, columns = ['col1', 'col2',...'col11'])
nos lleva 156. Pero%timeit d = pd.DataFrame(0, index = np.arange(10), columns = ['col1', 'col2',...'col11'])
nos lleva 171. Me sorprende que no sea más rápido.d.set_value(params)
después de inicializard
para contener ceros. Una solución fácil es:d = pd.DataFrame(0.0, index=np.arange(len(data)), columns=feature_list)
.Es mejor hacer esto con numpy en mi opinión
fuente
TypeError: 'numpy.float64' object does not support item assignment
np.float64
Similar a @Shravan, pero sin el uso de numpy:
Entonces puedes hacer lo que quieras con él:
fuente
Si desea que el nuevo marco de datos tenga el mismo índice y columnas que un marco de datos existente, puede simplemente multiplicar el marco de datos existente por cero:
fuente
Si ya tiene un marco de datos, esta es la forma más rápida:
Comparar con:
fuente
Suponiendo que tenga una plantilla DataFrame, que le gustaría copiar con valores cero llenos aquí ...
Si no tiene NaN en su conjunto de datos, multiplicar por cero puede ser significativamente más rápido:
La mejora depende del tamaño de DataFrame, pero nunca lo encontré más lento.
Y solo por el gusto de hacerlo:
Pero:
¡¡¡EDITAR!!!
Suponiendo que tiene un marco que usa float64, ¡este será el más rápido por un gran margen! También puede generar cualquier valor reemplazando 0.0 por el número de llenado deseado.
Dependiendo del gusto, uno puede definir externamente nan y hacer una solución general, independientemente del tipo de flotador particular:
fuente