抑制 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,
)

最初将输出为:

a b
0.01 1.00E-07
0.02 2.00E-07
0.03 3.00E-07

反而变成了我想要的输出:

a b
0.01 0.0000001
0.02 0.0000002
0.03 0.0000003

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

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

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

a b
0.0100000 0.0000001
0.0200000 0.0000002
0.0300000 0.0000003

(我也尝试按照建议 here 使用 np.format_float_positional,但没有成功。)

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

Pd.Series

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

或者简单地按照@user2357112 的建议支持 Monica

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

定义函数 让我们尝试将其放入 def 函数

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