抑制 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_positiona
l。如果在 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
有没有办法在 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_positiona
l。如果在 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