2017-10-12 4 views
2

J'ai un dataframe,valeurs des colonnes de données ne changent pas flotter

df, 
    Name Stage Description 
0 sri  1  sri is one of the good singer in this two 
1 nan  2  thanks for reading 
2 ram  1  ram is two of the good cricket player 
3 ganesh 1  one driver 
4 nan  2  good buddies 

tried df["Stage"]=pd.to_numeric(df["Stage"],downcast="float") 

mais les valeurs sont les mêmes

+0

Je pense que vous avez besoin 'df [ "Stage"] = pd.to_numeric (df [ "Stage"], erreurs = "coerce") ' – jezrael

+0

Je veux les valeurs dans float – pyd

+0

essayé df [" Stage "] = pd.to_numeric (df [" Stage "], erreurs =" coerce ") mais toujours le même – pyd

Répondre

1

Vous pouvez utiliser df.Stage.astype(float):

In [6]: df.Stage.astype(float) 
Out[6]: 
0 1.0 
1 2.0 
2 1.0 
3 1.0 
4 2.0 
Name: Stage, dtype: float64 

In [7]: df.Stage.astype(float) 

En utilisant pd.to_numeric est mieux car il gère la conversion à un type de float qui prend moins de mémoire.

Exemple

In [23]: df.Stage 
Out[23]: 
0 1 
1 2 
2 1 
3 1 
4 2 
Name: Stage, dtype: int64 

In [24]: import sys 

In [25]: sys.getsizeof(df.Stage) 
Out[25]: 272 

In [26]: sys.getsizeof(df.Stage.astype(float)) 
Out[26]: 272 

In [27]: sys.getsizeof(pd.to_numeric(df.Stage, downcast='float')) 
Out[27]: 252 

Dans le cas où il y a des données erronées dans df.Stage, contraignent la valeur à NaNpd.to_numeric(df.Stage, errors='coerce', downcast='float')

+0

son travaillé, merci – pyd

+0

@pyd vous êtes les bienvenus :) – MedAli

3

Je pense que vous avez besoin astype:

df["Stage"]=df["Stage"].astype(float) 

Si la première la solution a échoué car certaines données non numériques utilisent to_numeric wi e paramètre errors='coerce' pour remplacer les mauvaises données à NaNs, donc sortie sont flotteurs:

df["Stage"]=pd.to_numeric(df["Stage"],errors="coerce") 
+0

merci Jezrael, ça marche bien – pyd

+0

dans cet exemple http://pandas.pydata.org/pandas-docs/version/0.20/generated/pandas.to_numeric.html, ça marche mais quand j'essaye ça ne change pas pour flotter ' – pyd

+1

Oui, alors 'df [" Stage "] = pd.to_numeric (df [" Stage "], downcast = "float") 'devrait fonctionner aussi, mais astype est le meilleur si toutes les données sont numériques. – jezrael