Панды, конвертирующие float, удаляют экспоненты

У меня есть данные, которые выглядят так:

Date            MBs     GBs
0   2018-08-14 20:10    32.00 MB    0.00 GB
1   2018-08-14 20:05    4.00 MB     0.00 GB
2   2018-08-14 20:00    1000.99 MB  1.23 GB

Я удалил МБ и ГБ, сделав это:

df['MBs']=df['MB'].str.strip('MB')
df['GBs']=df['GB'].str.strip('GB')

Затем преобразовали число в число с плавающей запятой и получили итоги:

df['MBs'] = df['MBs'].astype('float')
df['GBs'] = df['MBs'].astype('float')

df.loc['Total', ['MBs', 'GBs']] = df.sum()

Но когда я запускаю его, у моих данных есть показатели

Date    Data Transferred (MB)   Data Transferred (GB)
146 2018-08-14 08:00:00 1.871237e+05    1.874017e+05
147 2018-08-14 07:55:00 1.123211e+05    1.961854e+05
148 2018-08-14 07:50:00 2.187703e+05    2.187123e+05
...
Total       1.408910e+08    1.408910e+08

Как мне преобразовать изменение этого числа с плавающей запятой из экспоненты в "нормальный", я конвертирую его только потому, что мне нужно получить итоги

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
2
0
4 266
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вот как поплавки представлены пандами, и это не то, что вы меняете. Однако вы можете изменить представление, если отформатируете данные как строку.

# Don't run this line.
# df = pd.concat([df] * 10000, ignore_index=True) 
# This should be run on the *unstripped* version of your DataFrame.
df.loc['Total', ['MBs', 'GBs']] = (
    df[['MBs', 'GBs']]
       .stack()
       .str.split()
       .str[0]
       .astype(float)
       .unstack()
       .sum()
       .agg('{:.2f}'.format))

df.tail()

                   Date          MBs       GBs
29996  2018-08-14 20:00   1000.99 MB   1.23 GB
29997  2018-08-14 20:10     32.00 MB   0.00 GB
29998  2018-08-14 20:05      4.00 MB   0.00 GB
29999  2018-08-14 20:00   1000.99 MB   1.23 GB
Total               NaN  10369900.00  12300.00
Ответ принят как подходящий

Вы пытаетесь избегать использования научных обозначений: Итак, вот что вы можете сделать:

import pandas as pd
pd.set_option('display.float_format', lambda x: '%.3f' % x)

эта строка кода устанавливает формат отображения панд, поэтому он не будет использовать научную нотацию

ссылка: http://pandas.pydata.org/pandas-docs/stable/options.html?highlight=display%20float_format

Преимущество этого решения в том, что вы управляете не самим фреймом данных, а способом его отображения. Кроме того, это будет применяться везде, а не для определенных значений в фрейме данных.

jpp 15.08.2018 11:03

Другие вопросы по теме