簡體   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