Подтвердить что ты не робот

Подавление научной нотации в pandas?

У меня есть DataFrame в pandas, где некоторые числа выражаются в научной нотации (или обозначении экспоненты) следующим образом:

                  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

И научная нотация делает то, что должно быть легко сравнивать, бесполезно сложно. Я предполагаю, что это значение 21900, которое прикручивает его к другим. Я имею в виду 1.0 кодируется. ОДИН!

Это не работает:

np.set_printoptions(supress=True) 

И pandas.set_printoptions также не реализует подавление, и я отыграл все в pd.describe_options() в отчаянии, а pd.core.format.set_eng_float_format() только, кажется, включил его для всех других значений float, не имея возможности повернуть его выкл.

4b9b3361

Ответ 1

Ваши данные, вероятно, object dtype. Это прямая копия/вставка ваших данных. read_csv интерпретирует его как правильный тип dtype. Обычно вы должны иметь object dtype для строковых полей.

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

проверьте, соответствуют ли ваши типы dtypes object

In [7]: df.dtypes
Out[7]: 
id       float64
value    float64
dtype: object

Это преобразует этот кадр в object dtype (обратите внимание, что сейчас смешно)

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

Вот как это сделать: (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

Вот кадр object dtype будет выглядеть как

In [10]: df.astype(object).dtypes
Out[10]: 
id       object
value    object
dtype: object

Ответ 2

быстрый временный: df.round(4)

global: pd.options.display.float_format = '{:20,.2f}'.format

Ответ 3

df["column"]).describe().apply(lambda x: format(x, 'f'))

Поскольку функция описывает возврат кадра данных, то, что делает вышеуказанная функция, она просто форматирует каждую строку в обычный формат.  Я написал этот ответ, потому что у меня было, хотя в моем сознании, это было Бессмысленно получить счет 95 как 95.00000e + 01 Также в нашем обычном формате его легче сравнивать.

Прежде чем применить указанную выше функцию, мы получили

count    9.500000e+01
mean     5.621943e+05
std      2.716369e+06
min      4.770000e+02
25%      2.118160e+05
50%      2.599960e+05
75%      3.121170e+05
max      2.670423e+07
Name: salary, dtype: float64

После применения получим

count          95.000000
mean       562194.294737
std       2716369.154553
min           477.000000
25%        211816.000000
50%        259996.000000
75%        312117.000000
max      26704229.000000
Name: salary, dtype: object

ударил, если это помогло:)

Тот же ответ изначально был отправлен на здесь ответ на столбец

Ответ 4

Если вы хотите использовать значения в виде форматированной строки в списке, например, как часть csvfile csv.writier, цифры могут быть сформированы перед созданием списка:

df['label'].apply(lambda x: '%.17f' % x).values.tolist()