繁体   English   中英

禁止 Pandas 中的科学记数法 *不*改变精度

[英]Suppress scientific notation in Pandas *without* altering precision

有没有办法在 Panda 的输出中抑制科学记数法而不强制所有列都具有特定的精度?

这样一个数据框:

import pandas as pd

df = pd.DataFrame({"a": [0.01, 0.02, 0.03], "b": [0.0000001, 0.0000002, 0.0000003]})

df.to_csv(
    "df.csv",
    index=False,
)

最初将输出为:

一个 b
0.01 1.00E-07
0.02 2.00E-07
0.03 3.00E-07

而是变成了我想要的 output:

一个 b
0.01 0.0000001
0.02 0.0000002
0.03 0.0000003

已经提出了许多关于在 Pandas'.to_csv 结果中抑制科学记数法的问题,但所有答案都涉及指定任意精度。

例如,在df.to_csv中设置float_format="%.7f"会强制所有浮点列和数字使用 7 个有效数字(当然, round(7)也是如此)。

这将导致以下 output,这是我不想要的:

一个 b
0.0100000 0.0000001
0.0200000 0.0000002
0.0300000 0.0000003

(我也尝试按照这里的建议使用np.format_float_positional ,但没有运气。)

在系列上实施np.format_float_positiona 如果在 df 上完成,您将被迫进行迭代,这在计算上可能非常昂贵。

Pd系列

df['b'] =[(lambda x: np.format_float_positional(x))(x) for x in df['b']]

或者只是按照@user2357112 的建议支持莫妮卡

df['b'] =[np.format_float_positional(x) for x in df['b']]

Def function让我们尝试将其放入 def function

import numpy as np

def format_float(df):
    
    cols=list(df.columns)
    for col in cols:
        df[col]=[np.format_float_positional(x) for x in df[col]]
        
    return df

format_float(df)

结果

 a          b
0  0.01  0.0000001
1  0.02  0.0000002
2  0.03  0.0000003

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM