2016-09-26 47 views
1

的Python似乎做有趣的事情浮點數,它從輸入我給它產生不同的浮點數字,我想浮點數保持一樣的輸入。輸入輸出浮點數問題蟒蛇

在這裏,我有一個小的測試數據集:

import pandas as pd 

df = {'ID': ['H1','H2','H3','H4','H5','H6'], 
     'Length': [72, 72, '', 72, 72,'' ], 
     'AA1': ['C','C','C','C','C','C'], 
     'AA2': ['W','W','W','W','W','W'], 
     'Freq': [0.14532872, 0.141868512,0.138408304, 0.14532872,0.138408304, 0.138408304 ], 
     'M': [-282.0570386,-279.1090993,-276.16116,-282.0570386,-274.7748657,-274.6160337]} 

df = pd.DataFrame(df) 

應該的樣子:

df 
    Out[2]: 
     AA1 AA2  Freq ID  Length   M 
    0 C W 0.14532872 H1  72   -282.0570386 
    1 C W 0.141868512 H2  72   -279.1090993 
    2 C W 0.138408304 H3    -276.16116 
    3 C W 0.14532872 H4  72   -282.0570386 
    4 C W 0.138408304 H5  72   -274.7748657 
    5 C W 0.138408304 H6    -274.6160337 

,但它實際上是這樣的,通知浮點數的區別列 '頻率' 和 'M':

df 
Out[2]: 
    AA1 AA2  Freq  ID Length   M 
    0 C W  0.145329 H1  72  -282.057039 
    1 C W  0.141869 H2  72  -279.109099 
    2 C W  0.138408 H3   -276.161160 
    3 C W  0.145329 H4  72  -282.057039 
    4 C W  0.138408 H5  72  -274.774866 
    5 C W  0.138408 H6    -274.616034 

當我運行我的腳本只是簡單的過濾掉行,我不想:

import pandas as pd 


df = pd.read_csv('test.txt', sep='\t') 

df2 = df[(df['Length'] != 0) & (df['AA1'] == 'C')& (df['AA2']== 'C')] 

df2.to_csv('results.txt', sep = '\t', index=False) 

的「RESULTS.TXT」文件包含奇怪的浮點數,這不是一樣的輸入,必須可以輸出浮點數作爲輸入,但我無法在線查找相關主題。

+1

他們是相同的數字,只是四捨五入。 [這裏](http://pandas.pydata.org/pandas-docs/stable/generated/pandas.set_option.html)在文檔它表明的數字的默認顯示數量是如在6'display.precision' – roganjosh

回答

0

花車怪異:https://ece.uwaterloo.ca/~dwharder/NumericalAnalysis/02Numerics/Double/paper.pdf

的情況並不少見看到奇特的尋找行爲了出來。如果你沒有對它們進行任何計算,我建議先將它們轉換爲字符串,這樣它們就會以你想要的格式存儲。

+0

這是隻是由於Pandas設置了要顯示的小數位數的默認精度。 – roganjosh

+0

轉換數值爲字符串並不總是一個好主意:尤其是熊貓商店字符串在與NumPy陣列數據框一DTYPE的'object'條目。這使得存儲要求爲一個'DataFrame'爆炸(從每雙精度浮點項8個字節向上每串項目60個字節),並且具有用於大DataFrames對性能有顯著影響。 –