在Python中将字符串转换为浮点数

3

我有一个csv文件,想要绘制其中的几个内容,并将字符串转换为浮点数。我的问题如下:

当我运行以下代码时,

with open('meteors.csv', 'rU') as csvfile:
    reader=csv.reader(csvfile)
    for row in reader:    
        print row[6]

我得到了这个输出:

58.58333

当我尝试使用以下代码时
print type(row[6])

我得到了这个输出:

<type 'str'>

但是当我尝试时。
 print float(row[6])

我收到了这个错误:

ValueError: could not convert string to float: coordinate_1

有人知道发生了什么事吗?

字符串的末尾是否有类似于\n\t等的终止符? - TheMerovingian
不确定。有没有办法检查? - JupiterOrange
我猜可能有,但我不确定,抱歉。也许@jamylak可以帮忙,他似乎对大多数Python的东西都很了解。 - TheMerovingian
1
@TheMerovingian 你的意思是像 repr(s) 这样吗? - jamylak
1
@user1571767:请尝试使用print(repr(row[6])),它将打印出原始的string,显示所有终止字符。 - TheMerovingian
显示剩余2条评论
2个回答

4

很有可能你看到的是CSV文件中第一行,它包含了列标题,而coordinate_1就是其中一个标题。

你可以选择跳过第一行:

with open('meteors.csv', 'rU') as csvfile:
    reader=csv.reader(csvfile)
    reader.next() # skips the first (header) row
    for row in reader:    
        print row[6]

或者,使用DictReader,像这样:
with open('meteors.csv', 'rU') as csvfile:
    reader=csv.DictReader(csvfile)
    for row in reader:    
        print row['coordinate_1']

@BurhanKhalid,你也应该使用next()函数,因为我在另一个答案中指出的原因。否则,是的,这是更清晰的方式。 - jamylak

2
您的CSV文件可能包含一个标题,其中列出了每一列的名称。您无法将这些名称转换为浮点数,因此这就是错误的根源。
您必须先处理标题:
with open('meteors.csv', 'rU') as csvfile:
    reader = csv.reader(csvfile)
    header = next(reader)

    for row in reader:
        print float(row[6])

是的,因为它们将.next更改为特殊方法.__next__,因为创建该函数时应该使用next函数。 - jamylak
@jamylak:啊,我从来不知道。谢谢。 - Blender

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接