将“字符串”转换为“浮动”?

时间:2017-06-23 23:29:45

标签: python numpy matplotlib

我正在尝试绘制以下形式的行的.txt文件:

filename.txt  date    magnitude
V098550.txt   362.0   3.34717962317

但是我收到错误“无法将字符串转换为浮点数: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 个答案:

答案 0 :(得分: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"