Подавление научной нотации в 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, не имея возможности повернуть его выкл.
Ответы
Ответ 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()