2016-06-10 68 views
0

從數據模擬中導出CSV文件時,我們丟失了與記錄數據相關的小數位數,導致我們的圖和值不準確。Python - 將小數位添加到cvs文件中的元素

收集數據後,將其導入到excel中,然後導出爲CSV。最初有數據的十進制值(例如1356.00000),但它們不是以CSV數據的形式導出的。我對這些值使用了curve_fit,並且我發現在小數值丟失的情況下,精度大大降低。所以這就是爲什麼我要爲數據集中的每個元素添加小數點的原因。

有沒有什麼辦法解決這個問題,使數組中的所有值元素都以十進制值的數組輸出?

import numpy as np 
import scipy as sp 
import csv 

DecayTime = [] 
DecayCount = [] 

with open('Half_Life_Run_Decay.csv', 'r') as h: 
    reader = csv.reader(h, delimiter=',') 
    for row in reader: 
     DecayTime4.append(row[0]) 
     DecayCount4.append(row[1]) 

DecayTime = np.array(DecayTime) 
DecayCount = np.array(DecayCount) 
+0

'csv.reader'讀取它們的行爲字符串。嘗試在追加到'DecayTime []'之前將它們轉換爲'float'。 – Quirk

+0

是csv文件不準確?沒有辦法將csv文件與不準確/不準確的數據結合起來,並修正準確性/精確度。另一方面,如果您的意思是加載csv文件時丟失了精度,則需要澄清您的問題。 –

+0

@ TadhgMcDonald-Jensen收集數據後,將其導入到excel中,並將數據導出爲CVS。原來有數據的十進制值(即1356.00000),但它們沒有與數據一起導出。我對這些值使用了curve_fit,並且我發現精度隨着小數值的丟失而大大減少。這就是爲什麼我想爲數據集中的每個元素添加小數點。 – DarthLazar

回答

0

我不確定你的問題與精度有關,因爲它是關於數據類型的。所有的數據都被解釋爲整數?

嘗試轉換您的一行到浮點訪問其列前:

row = map(float, row)   

或者,如果你只是想改變琴絃:

row = map(lambda s: s + ".0000", row)          
+0

問題在於精度。我已經運行了他們的小數位保存的地方,像256.00000和345.00000,當它通過curve_fit運行時,它給了我正確的值和圖。我只是想知道如何通過添加小數位來循環。您可以讓數組中的每個元素均爲0.0001。 – DarthLazar

+0

有趣的是'numpy'數組的默認數據類型是'float'。通過這個參數,你的'curve_fit'應該運行良好。 – Quirk

+0

@Quirk是啊,我還不確定這是否是數據類型問題。我對numpy不是很熟悉,但'curve_fit'確實將函數作爲一個參數,可能將int整理爲整數。我想讓OP通過添加「.0000」來嘗試,看看它是否真的解決了問題。 – rrauenza