148 votes

Conversion de chaînes de caractères en flottants dans un DataFrame

Comment dissimuler une colonne de DataFrame contenant des chaînes de caractères et des noms de domaine ? NaN en valeurs flottantes. Et il y a une autre colonne dont les valeurs sont des chaînes de caractères et des flottants ; comment convertir cette colonne entière en flottants.

81voto

Jeff Points 27612

NOTE : pd.convert_objects a maintenant été déprécié. Vous devez utiliser pd.Series.astype(float) o pd.to_numeric comme décrit dans d'autres réponses.

Ceci est disponible en 0.11. Force la conversion (ou met à nan) Cela fonctionnera même si astype échouera ; c'est aussi série par série donc il ne convertira pas 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

76voto

root Points 14514

Vous pouvez essayer df.column_name = df.column_name.astype(float) . Quant à l NaN vous devez spécifier la manière dont elles doivent être converties, mais vous pouvez utiliser la fonction .fillna 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])

60voto

Salvador Dali Points 11667

Dans une version plus récente de pandas (0.17 et plus), vous pouvez utiliser la méthode suivante vers_numérique fonction. Elle vous permet de convertir l'ensemble du cadre de données ou seulement certaines colonnes. Elle vous permet également de choisir comment 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')

37voto

HommeDeJava Points 46
df['MyColumnName'] = df['MyColumnName'].astype('float64')

14voto

Paul Mwaniki Points 181

Vous devez remplacer les chaînes vides ('') par np.nan avant de les convertir en flottants. c'est-à-dire

df['a']=df.a.replace('',np.nan).astype(float)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X