Quelle est la meilleure façon de créer une trame de données pandas remplie de zéro d'une taille donnée?
J'ai utilisé:
zero_data = np.zeros(shape=(len(data),len(feature_list)))
d = pd.DataFrame(zero_data, columns=feature_list)
Y a-t-il une meilleure façon de le faire?
data
? Pourquoi avez-vous besoin de créer une autre structure pour la tenir?Réponses:
Vous pouvez essayer ceci:
la source
%timeit temp = np.zeros((10, 11)); d = pd.DataFrame(temp, columns = ['col1', 'col2',...'col11'])
prend 156 nous. Mais%timeit d = pd.DataFrame(0, index = np.arange(10), columns = ['col1', 'col2',...'col11'])
prend 171 nous. Je suis surpris que ce ne soit pas plus rapide.d.set_value(params)
après l'initialisationd
pour contenir des 0. Une solution facile est:d = pd.DataFrame(0.0, index=np.arange(len(data)), columns=feature_list)
.Il vaut mieux faire ça avec numpy à mon avis
la source
TypeError: 'numpy.float64' object does not support item assignment
np.float64
Similaire à @Shravan, mais sans l'utilisation de numpy:
Ensuite, vous pouvez en faire ce que vous voulez:
la source
Si vous souhaitez que le nouveau bloc de données ait le même index et les mêmes colonnes qu'un bloc de données existant, vous pouvez simplement multiplier le bloc de données existant par zéro:
la source
Si vous disposez déjà d'un dataframe, c'est le moyen le plus rapide:
Comparer aux:
la source
En supposant avoir un modèle DataFrame, que l'on aimerait copier avec des valeurs nulles remplies ici ...
Si vous n'avez pas de NaN dans votre ensemble de données, la multiplication par zéro peut être beaucoup plus rapide:
L'amélioration dépend de la taille de DataFrame, mais ne l'a jamais trouvée plus lente.
Et juste pour le plaisir:
Mais:
ÉDITER!!!
En supposant que vous ayez un cadre utilisant float64, ce sera le plus rapide de loin! Il est également capable de générer n'importe quelle valeur en remplaçant 0,0 par le nombre de remplissage souhaité.
Selon le goût, on peut définir extérieurement nan, et faire une solution générale, quel que soit le type de flotteur particulier:
la source