J'ai un DataFrame dans les pandas où certains des nombres sont exprimés en notation scientifique (ou notation d'exposant) comme ceci:
id value
id 1.00 -4.22e-01
value -0.42 1.00e+00
percent -0.72 1.00e-01
played 0.03 -4.35e-02
money -0.22 3.37e-01
other NaN NaN
sy -0.03 2.19e-04
sz -0.33 3.83e-01
Et la notation scientifique rend ce qui devrait être une comparaison facile, inutilement difficile. Je suppose que c'est la valeur 21900 qui fait foirer les autres. Je veux dire que 1.0 est codé. UN!
Cela ne marche pas:
np.set_printoptions(supress=True)
Et pandas.set_printoptions
n'implémente pas non plus la suppression, et j'ai tout regardé à pd.describe_options()
avec désespoir, et pd.core.format.set_eng_float_format()
ne semble l'activer que pour toutes les autres valeurs flottantes, sans possibilité de le désactiver.
Vos données sont probablement object
dtype. Ceci est un copier/coller direct de vos données. read_csv
l'interprète comme le bon type. Vous ne devriez normalement avoir que object
dtype sur les champs de type chaîne.
In [5]: df = read_csv(StringIO(data),sep='\s+')
In [6]: df
Out[6]:
id value
id 1.00 -0.422000
value -0.42 1.000000
percent -0.72 0.100000
played 0.03 -0.043500
money -0.22 0.337000
other NaN NaN
sy -0.03 0.000219
sz -0.33 0.383000
vérifiez si vos types sont object
In [7]: df.dtypes
Out[7]:
id float64
value float64
dtype: object
Ceci convertit ce cadre en object
dtype (notez que l'impression est drôle maintenant)
In [8]: df.astype(object)
Out[8]:
id value
id 1 -0.422
value -0.42 1
percent -0.72 0.1
played 0.03 -0.0435
money -0.22 0.337
other NaN NaN
sy -0.03 0.000219
sz -0.33 0.383
Voici comment le reconvertir (astype(float)
) fonctionne également ici
In [9]: df.astype(object).convert_objects()
Out[9]:
id value
id 1.00 -0.422000
value -0.42 1.000000
percent -0.72 0.100000
played 0.03 -0.043500
money -0.22 0.337000
other NaN NaN
sy -0.03 0.000219
sz -0.33 0.383000
Voici à quoi ressemblerait un cadre object
dtype
In [10]: df.astype(object).dtypes
Out[10]:
id object
value object
dtype: object
temporaire rapide: df.round(4)
global: pd.options.display.float_format = '{:20,.2f}'.format
Si vous souhaitez utiliser les valeurs comme chaîne formatée dans une liste, par exemple dans le fichier csv csv.writer, vous pouvez formater les nombres avant de créer une liste:
df['label'].apply(lambda x: '%.17f' % x).values.tolist()