微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为每列分别指定float_format科学计数法与十进制精度 设置precision:全局设置设置float_format:全局设置 apply或map:str格式 np.format_float_scientific:str格式

如何解决为每列分别指定float_format科学计数法与十进制精度 设置precision:全局设置设置float_format:全局设置 apply或map:str格式 np.format_float_scientific:str格式

我有多列,有些我想用科学计数法,另一些要达到特定的十进制精度水平:

   Frequency    n
0     0.0023  2.3
1     0.0420  4.5
2     0.5460  6.7
3     0.1230  8.9

频率可以有一个小的数量级,所以我最终得到十亿个零。 “ n”列应设置为固定的小数位数。

我尝试在“频率”列上执行以下操作:

fntables['Frequency'].options.display.float_format = '{:.2e}'.format

这将返回预期的错误,因为“系列”对象没有属性“选项”,因为选项位于熊猫级实例上。

解决方法

样本数据

import pandas as pd
import numpy as np

# sample data
np.random.seed(10)
df = pd.DataFrame(np.random.random(5)**10,columns=['A'])

# display(df)
              A
0  7.453316e-02
1  1.481116e-17
2  1.043476e-02
3  5.542183e-02
4  9.477913e-04

设置precision:全局设置

  • 浮点输出精度,以小数点后的位数表示,适用于常规格式以及科学计数法。类似于numpy的精确打印选项
  • pd.reset_option('precision')重置设置。
pd.set_option('precision',3)

# display(df)
           A
0  7.453e-02
1  1.481e-17
2  1.043e-02
3  5.542e-02
4  9.478e-04

print(df.iloc[0,0])
[out]:
0.07453316227023182

设置float_format:全局设置

  • 可调用对象应接受浮点数,并以所需的数字格式返回字符串。这在SeriesFormatter等某些地方使用。有关示例,请参见core.format.EngFormatter。
  • pd.reset_option('float_format')重置设置。
pd.options.display.float_format = '{:.3e}'.format

# display(df)
          A
0 7.453e-02
1 1.481e-17
2 1.043e-02
3 5.542e-02
4 9.478e-04

print(df.iloc[0,0])
[out]:
0.07453316227023182

applymapstr格式

df['format'] = df.A.apply(lambda x: f'{x:0.3e}')
df['format'] = df.A.apply('{:,.3e}'.format)
df['format'] = df.A.map('{:,.3e}'.format)

# display(df)
              A     format
0  7.453316e-02  7.453e-02
1  1.481116e-17  1.481e-17
2  1.043476e-02  1.043e-02
3  5.542183e-02  5.542e-02
4  9.477913e-04  9.478e-04

np.format_float_scientificstr格式

df['numpy_format'] = df.A.map(lambda x: np.format_float_scientific(x,precision = 3))

# display(df)
              A numpy_format
0  7.453316e-02    7.453e-02
1  1.481116e-17    1.481e-17
2  1.043476e-02    1.043e-02
3  5.542183e-02    5.542e-02
4  9.477913e-04    9.478e-04
,

最终通过np.format_float_scientific方法使用列表理解

fntables['A_sci'] = [np.format_float_scientific(x,precision = 3) for x in fntables['A']]

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。