web-dev-qa-db-fra.com

Manière élégante de créer des vides pandas DataFrame avec NaN de type float

Je veux créer un Pandas DataFrame rempli de NaN. Au cours de mes recherches, j'ai trouvé ne réponse :

import pandas as pd

df = pd.DataFrame(index=range(0,4),columns=['A'])

Ce code génère un DataFrame rempli de NaN de type "objet". Ils ne peuvent donc plus être utilisés ultérieurement, par exemple avec la méthode interpolate(). Par conséquent, j'ai créé le DataFrame avec ce code compliqué (inspiré par cette réponse ):

import pandas as pd
import numpy as np

dummyarray = np.empty((4,1))
dummyarray[:] = np.nan

df = pd.DataFrame(dummyarray)

Cela se traduit par un DataFrame rempli avec NaN de type "float", de sorte qu'il peut être utilisé ultérieurement avec interpolate(). Existe-t-il un moyen plus élégant de créer le même résultat?

36
mjd

Passez simplement le représentant souhaité en tant que premier argument scalaire, comme 0, math.inf ou, dans ce cas, np.nan. Le constructeur initialise ensuite le tableau de valeurs à la taille spécifiée par index et columns:

 >>> df = pd.DataFrame(np.nan, index=[0,1,2,3], columns=['A'])
 >>> df.dtypes
 A    float64
 dtype: object
55
ojdo

Vous pouvez spécifier le type directement lors de la construction du DataFrame:

>>> df = pd.DataFrame(index=range(0,4),columns=['A'], dtype='float')
>>> df.dtypes
A    float64
dtype: object

Spécifier le type force oblige Pandas pour essayer de créer le DataFrame avec ce type, plutôt que d'essayer de l'inférer.

11
Alex Riley

J'espère que cela peut aider!

 pd.DataFrame(np.nan, index = np.arange(<num_rows>), columns = ['A'])
3
errorParser

Vous pouvez essayer cette ligne de code:

pdDataFrame = pd.DataFrame([np.nan] * 7)

Cela créera un pandas dataframe de taille 7 avec NaN de type float:

si vous imprimez pdDataFrame, le résultat sera:

     0
0   NaN
1   NaN
2   NaN
3   NaN
4   NaN
5   NaN
6   NaN

Aussi la sortie pour pdDataFrame.dtypes est:

0    float64
dtype: object
1
Yogesh

Pour plusieurs colonnes, vous pouvez faire:

df = pd.DataFrame(np.zeros([nrow, ncol])*np.nan)
0
Digio