Réponses:
REMARQUE:
pd.convert_objects
est désormais obsolète. Vous devez utiliserpd.Series.astype(float)
oupd.to_numeric
comme décrit dans les autres réponses.
Ceci est disponible en 0.11. Conversion de forces (ou mise en nan) Cela fonctionnera même en cas d' astype
échec; il est également série par série, donc il ne convertit pas, disons une colonne de chaîne complète
In [10]: df = DataFrame(dict(A = Series(['1.0','1']), B = Series(['1.0','foo'])))
In [11]: df
Out[11]:
A B
0 1.0 1.0
1 1 foo
In [12]: df.dtypes
Out[12]:
A object
B object
dtype: object
In [13]: df.convert_objects(convert_numeric=True)
Out[13]:
A B
0 1 1
1 1 NaN
In [14]: df.convert_objects(convert_numeric=True).dtypes
Out[14]:
A float64
B float64
dtype: object
df['ColumnName'] = df['ColumnName'].convert_objects(convert_numeric=True)
Vous ne pouvez convertir qu'une seule colonne.
Vous pouvez essayer df.column_name = df.column_name.astype(float)
. En ce qui concerne les NaN
valeurs, vous devez spécifier comment elles doivent être converties, mais vous pouvez utiliser la .fillna
méthode pour le faire.
Exemple:
In [12]: df
Out[12]:
a b
0 0.1 0.2
1 NaN 0.3
2 0.4 0.5
In [13]: df.a.values
Out[13]: array(['0.1', nan, '0.4'], dtype=object)
In [14]: df.a = df.a.astype(float).fillna(0.0)
In [15]: df
Out[15]:
a b
0 0.1 0.2
1 0.0 0.3
2 0.4 0.5
In [16]: df.a.values
Out[16]: array([ 0.1, 0. , 0.4])
Dans une version plus récente de pandas (0.17 et plus), vous pouvez utiliser la fonction to_numeric . Il vous permet de convertir le dataframe entier ou seulement des colonnes individuelles. Il vous donne également la possibilité de sélectionner la manière de traiter les éléments qui ne peuvent pas être convertis en valeurs numériques:
import pandas as pd
s = pd.Series(['1.0', '2', -3])
pd.to_numeric(s)
s = pd.Series(['apple', '1.0', '2', -3])
pd.to_numeric(s, errors='ignore')
pd.to_numeric(s, errors='coerce')
pd.to_numeric
à un DataFrame
, on peut utiliser df.apply(pd.to_numeric)
comme expliqué en détail dans cette réponse .
df['MyColumnName'] = df['MyColumnName'].astype('float64')
ValueError: could not convert string to float: 'date'
vous devez remplacer les chaînes vides ('') par np.nan avant de convertir en float. c'est à dire:
df['a']=df.a.replace('',np.nan).astype(float)
Voici un exemple
GHI Temp Power Day_Type
2016-03-15 06:00:00 -7.99999952505459e-7 18.3 0 NaN
2016-03-15 06:01:00 -7.99999952505459e-7 18.2 0 NaN
2016-03-15 06:02:00 -7.99999952505459e-7 18.3 0 NaN
2016-03-15 06:03:00 -7.99999952505459e-7 18.3 0 NaN
2016-03-15 06:04:00 -7.99999952505459e-7 18.3 0 NaN
mais si ce sont toutes des valeurs de chaîne ... comme c'était dans mon cas ... Convertissez les colonnes souhaitées en flottants:
df_inv_29['GHI'] = df_inv_29.GHI.astype(float)
df_inv_29['Temp'] = df_inv_29.Temp.astype(float)
df_inv_29['Power'] = df_inv_29.Power.astype(float)
Votre dataframe aura désormais des valeurs flottantes :-)
convert_objects
. Il est obsolète. Utiliserto_numeric
ou à laastype
place