Ich habe einen DataFrame in Pandas, bei dem einige Zahlen in wissenschaftlicher Notation (oder Exponenten-Notation) wie folgt ausgedrückt werden:
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
Und die wissenschaftliche Notation macht einen einfachen Vergleich unnötig schwierig. Ich gehe davon aus, dass es der Wert 21900 ist, der es für die anderen vermasselt. Ich meine 1.0 ist verschlüsselt. EIN!
Das funktioniert nicht:
np.set_printoptions(supress=True)
Und pandas.set_printoptions
implementiert auch keine Unterdrückung, und ich habe pd.describe_options()
verzweifelt betrachtet. pd.core.format.set_eng_float_format()
scheint es nur für alle anderen Float-Werte zu aktivieren, ohne die Möglichkeit, es auszuschalten.
Ihre Daten sind wahrscheinlich object
dtype. Dies ist eine direkte Kopie/Einfügung Ihrer Daten. read_csv
interpretiert es als den richtigen dtype. Normalerweise sollten Sie object
dtype nur für strangeartige Felder verwenden.
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
prüfen Sie, ob Ihre Datentypen object
sind.
In [7]: df.dtypes
Out[7]:
id float64
value float64
dtype: object
Dies konvertiert diesen Frame in object
dtype (der Druck ist jetzt lustig)
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
So kann man es auch zurück konvertieren (astype(float)
)
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
So würde ein object
dtype-Frame aussehen
In [10]: df.astype(object).dtypes
Out[10]:
id object
value object
dtype: object
schnell temporär: df.round(4)
global: pd.options.display.float_format = '{:20,.2f}'.format
Wenn Sie die Werte als formatierten String in einer Liste verwenden möchten, beispielsweise als Teil der csv-Datei csv.writer, können die Zahlen vor dem Erstellen einer Liste formatiert werden:
df['label'].apply(lambda x: '%.17f' % x).values.tolist()