列表中的字符串转为浮点数

3

我有一个名为“ft_List”的列表,看起来像这样...

[['Fall2001', '22.00', '2000', '01', '01', '120.0', '', 'N'], 
[CgeCam2002', '20.00', '2000', '09', '04', '0.0', '1', ''],
['Fall2004', '18.50', '2001', '18', '01', '', '', 'Y']........

我该如何将第五列转换为浮点数?我尝试了

for i in ft_Rec:
    ms = i[5].split(',')
    float(ms)

但是出现了错误

类型错误:浮点数(float)参数必须是字符串或数字

我以为它是一个字符串?难道是因为某些字段为空('')吗?我想对这一列进行一些计算。


即使不用分割,我还是会得到同样的错误。 - user2395759
1
请注意,float(ms) 不会修改您的列表:您需要使用 i[5] = float(ms) - jamylak
4个回答

3

您不需要拆分此输入,它已经是一个列表,只需检查空字符串即可:

for i in ft_Rec:
    if i[5]: print float(i[5])

获取总数:
total = sum( float(i[5]) for i in ft_Rec if i[5] )

好的,谢谢。它似乎打印所有浮点数,但我应该把sum(i[5])放在哪里?如果它在for循环内部,它会说float()不可迭代。 - user2395759

1
>>> ft_List = [['Fall2001', '22.00', '2000', '01', '01', '120.0', '', 'N'],
['CgeCam2002', '20.00', '2000', '09', '04', '0.0', '1', ''],
['Fall2004', '18.50', '2001', '18', '01', '', '', 'Y']]
>>> for i in ft_List:
        i[5] = float(i[5] or 0) # empty string logical ors to 0


>>> ft_List
[['Fall2001', '22.00', '2000', '01', '01', 120.0, '', 'N'], ['CgeCam2002', '20.00', '2000', '09', '04', 0.0, '1', ''], ['Fall2004', '18.50', '2001', '18', '01', 0.0, '', 'Y']]

问题是:

>>> float('')

Traceback (most recent call last):
  File "<pyshell#22>", line 1, in <module>
    float('')
ValueError: could not convert string to float: 

这个解决方案利用了Python中空的内置对象被视为False的事实。
>>> '' or 0
0

我理解了你所说的“Python中的空对象会被视为False”:这对于内置对象是正确的,但并不要求用户自定义类也遵循此规则(默认情况下,即使是“空”的对象也会被视为True!)。 - Eric O. Lebigot
@EOL 谢谢,我最初本来想用那个的,但觉得这样会使它变得太复杂了。 - jamylak

0
你可以这样做:
>>> for row in ll:
...     f = float(row[5]) if row[5] else 0.
...     print f
... 
120.0
0.0
0.0

其中ll是:

>>> ll = [['Fall2001', '22.00', '2000', '01', '01', '120.0', '', 'N'], 
         ['CgeCam2002', '20.00', '2000', '09', '04', '0.0', '1', ''], 
         ['Fall2004', '18.50', '2001', '18', '01', '', '', 'Y']]

我在打印空字符串''时输出0.0


-1

Python 不接受空字符串作为浮点数参数。

    >>>float(' ')
    >>>ValueError: could not convert string to float:

问题是“我如何将第5列转换为浮点数?” - Eric O. Lebigot

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