Pandas将浮点数转换为不带指数的形式

5

我有这样的数据:

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

我通过以下方式去除了 MB 和 GB:

我去掉了 MB 和 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

如何将指数形式的浮点数转换为“正常”形式,我只是将其转换是因为我需要获得总数。

2个回答

9

这种解决方案的好处是你不会操作数据框本身,而是它的显示方式。此外,这将应用于所有地方,而不仅仅是数据框中的特定值。 - jpp

2

这就是pandas表示浮点数的方式,这是无法更改的。但是,您可以通过将数据格式化为字符串来改变其表示形式。

# 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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接