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.
Réponses
Trop de publicités?NOTE :
pd.convert_objects
a maintenant été déprécié. Vous devez utiliserpd.Series.astype(float)
opd.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
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])
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')
- Réponses précédentes
- Plus de réponses