簡體   English   中英

"抑制熊貓的科學記數法?"

[英]Suppressing scientific notation in pandas?

我在 pandas 中有一個 DataFrame,其中一些數字以科學記數法(或指數記數法)表示,如下所示:

                  id        value
id              1.00    -4.22e-01
value          -0.42     1.00e+00
percent        -0.72     1.00e-01
played          0.03    -4.35e-02
money          -0.22     3.37e-01
other            NaN          NaN
sy             -0.03     2.19e-04
sz             -0.33     3.83e-01

快速臨時: df.round(4)

全局: pd.options.display.float_format = '{:20,.2f}'.format

您的數據可能是object數據類型。 這是您數據的直接復制/粘貼。 read_csv將其解釋為正確的 dtype。 您通常應該只在類似字符串的字段上使用object dtype。

In [5]: df = read_csv(StringIO(data),sep='\s+')

In [6]: df
Out[6]: 
           id     value
id       1.00 -0.422000
value   -0.42  1.000000
percent -0.72  0.100000
played   0.03 -0.043500
money   -0.22  0.337000
other     NaN       NaN
sy      -0.03  0.000219
sz      -0.33  0.383000

檢查您的數據類型是否為object

In [7]: df.dtypes
Out[7]: 
id       float64
value    float64
dtype: object

這將此幀轉換為object dtype(注意現在打印很有趣)

In [8]: df.astype(object)
Out[8]: 
           id     value
id          1    -0.422
value   -0.42         1
percent -0.72       0.1
played   0.03   -0.0435
money   -0.22     0.337
other     NaN       NaN
sy      -0.03  0.000219
sz      -0.33     0.383

這是如何將它轉換回來( astype(float) )在這里也有效

In [9]: df.astype(object).convert_objects()
Out[9]: 
           id     value
id       1.00 -0.422000
value   -0.42  1.000000
percent -0.72  0.100000
played   0.03 -0.043500
money   -0.22  0.337000
other     NaN       NaN
sy      -0.03  0.000219
sz      -0.33  0.383000

這就是object dtype 框架的樣子

In [10]: df.astype(object).dtypes
Out[10]: 
id       object
value    object
dtype: object

如果您想將值用作列表中的格式化字符串,例如作為 csvfile csv.writier 的一部分,則可以在創建列表之前對數字進行格式化:

df['label'].apply(lambda x: '%.17f' % x).values.tolist()

試試這個,它只會為大值和非常小的值提供科學記數法(並添加千位分隔符,除非你省略“,”):

pd.set_option('display.float_format', lambda x: '%,g' % x)

或者要在不損失精度的情況下幾乎完全抑制科學記數法,請嘗試以下操作:

pd.set_option('display.float_format', str)

無需四舍五入的快速修復:

pd.options.display.float_format = '{:.0f}'.format

我嘗試了所有選項,例如

  1. pd.options.display.float_format = '{:.4f}'.format<\/li>
  2. pd.set_option('display.float_format', str)<\/li>
  3. pd.set_option('display.float_format', lambda x: f'%.{len(str(x%1))-2}f' % x)<\/li>
  4. pd.set_option('display.float_format', lambda x: '%.3f' % x)<\/li><\/ol>

    但沒有什么對我有用。

    所以在將變量\/值(var1)分配給變量(比如num1)時,我使用了round(val,5)。

    這是一種粗略的方法,因為您必須在每個作業中使用此輪函數。 但這可以確保您控制它的發生方式並獲得您想要的。

    "

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM