2017-06-23 95 views
-1

我試圖繪製表格線的.txt文件:轉換「字符串」爲「浮動」?

filename.txt date magnitude 
V098550.txt 362.0 3.34717962317 

但我得到的錯誤「無法字符串轉換爲float:V113573.txt」。有誰知道這是否是numpy的語法錯誤,或者我可以如何解決我的問題?

import numpy as np 
import matplotlib.pyplot as plt 
x, y = np.loadtxt ("condensed.txt", usecols=(0, 1), delimiter=",", 
unpack=True) 
for ii in range (len(x)): 
    x[ii].replace('.txt', '.lc\n') 
    jd, npmag = np.loadtxt 
    ("/net/jovan/export/jovan/oelkerrj/Vela/rotation/Vela/"+x[ii], usecols= 
(0, 1), unpack=True) 
    plt.scatter (jd, npmag) 
    plt.xlabel ('Time') 
    plt.ylabel ('Mag') 
    plt.ylim ([max (npmag), min (npmag)]) 
    plt.show() # aftertest comment this out 
    fileName = x[ii][:-3] + ".png" 
    plt.savefig(fileName) 
print "done" 
+1

你想使用列'(1,2)'。列'0'包含像'V098550.txt'這樣的文件名,正如錯誤信息所示,它不能被轉換爲浮點數。 –

+0

注意:如果您的代碼在np.loadtxt調用中斷,那麼在此之後包含代碼沒有意義。然而,當你通過'np.loadtxt'時,你將不得不處理其他代碼。 –

+0

@LevLevitsky您能否指出一些錯誤以及我能做些什麼來解決它們? – ASTR

回答

1

很難找到代碼中的所有錯誤,因此需要從頭開始。首先它看起來數據文件有空格作爲分隔符,所以您需要刪除delimiter=",",因爲文件中沒有逗號。

接下來,您不能將字符串V098550.txt從文件轉換爲浮點型。相反,它需要保持一個字符串。您可以在loadtxt中使用轉換器,並將該列的dtype設置爲字符串。

所以你可以從下面開始,看看你能得到多少。如果出現更多錯誤,則還需要知道V098550.txt的內容。

import numpy as np 
import matplotlib.pyplot as plt 

conv = {0: lambda x: x.replace('.txt', ".lc")} 
x, y = np.loadtxt("condensed.txt", usecols=(0, 1), delimiter=" ", 
        unpack=True, converters=conv, dtype=(str, str), skiprows=1) 

for ii in range (len(x)): 
    jd, npmag = np.loadtxt("/net/jovan/export/jovan/oelkerrj/Vela/rotation/Vela/"+x[ii], usecols=(0, 1), unpack=True) 
    plt.scatter (jd, npmag) 
    plt.xlabel ('Time') 
    plt.ylabel ('Mag') 
    plt.ylim ([max (npmag), min (npmag)]) 
    plt.show() # aftertest comment this out 
    fileName = x[ii][:-3] + ".png" 
    plt.savefig(fileName) 

print "done"