首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将字符串列表(Csv)转换为浮点数列表

将字符串列表(Csv)转换为浮点数列表
EN

Stack Overflow用户
提问于 2012-06-18 09:41:23
回答 1查看 10.9K关注 0票数 0

我在将这个字符串列表转换为浮点数列表时遇到了一些困难。我尝试了这两种方法,每种方法都返回了不同的错误。

代码语言:javascript
复制
import csv
import math

unemp_reader = csv.reader(open('unemp.csv', 'rU'))
unemp_lines = list(unemp_reader)

for rows in unemp_lines:     #tried this way, but error tells me indices must be integers 
    i = 1
    for i in rows:
        a = map(float, unemp_lines[i])
        float_list.append(a)
    print float_list

for row in unemp_lines:  #tried this way but the list returned is empty
    y = row[1].split(",")[1:-1]
    float_list = [float(i) for i in y if i]
print float_list
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-06-18 09:45:02

您在第一个示例中遇到的问题是,for循环不给出索引,而是给出列表中的值。这意味着你的例子没有任何实际意义。

第二个示例获取行中的第二个项目,将其拆分为逗号(无论如何,这都应该由csv模块处理),然后获取结果列表中的倒数第二个项目。正如我想象的那样,值中没有逗号,这将获取一个只有一个元素的列表的[1:-1],返回一个空列表。我真的不能理解这里的意图。然后,您还可以只存储最后一行的数据(每次覆盖float_list )。您似乎是在事后猜测csv模块,并使其变得比实际困难得多。

你需要停止过度复杂化:

代码语言:javascript
复制
with open('unemp.csv', 'rb') as data:
    rows = csv.reader(data)
    next(rows) #Skip the headers.
    floats = [[float(item) for number, item in enumerate(row) if item and (1 <= number <= 12)] for row in rows]

print(floats)

为了解释,首先我们使用with语句以一种可读的pythonic方式打开文件(这确保了文件被正确地关闭,即使在出现异常的情况下也是如此)。然后,我们创建一个csv.reader来从CSV文件中获取数据。我们通过将迭代器前进一来跳过标题,这意味着我们从第二行开始。然后,我们使用列表理解从迭代器生成一个新的列表,其中包含另一个列表理解,如果这些值存在并且不在YearAnnual列中,则生成这些值的浮点数。为此,我们使用enumerate()内置函数来获取所在列的编号,然后进行检查以确保它不是0 (Year)或13 (Annual)。

正如J.F.Sebastian在注释中指出的,最好的解决方案是让csv模块为您处理数字,方法是将命名参数quoting添加到值为csv.QUOTE_NONNUMERICcsv.reader()调用中。例如:

代码语言:javascript
复制
with open('unemp.csv', 'rb') as data:
    rows = csv.reader(data, quoting=csv.QUOTE_NONNUMERIC)
    next(rows) #Skip the headers.
    floats = [[item for number, item in enumerate(row) if item and (1 <= number <= 12)] for row in rows]

print(floats)
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11076138

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档