如何将csv文件的第二列转换为浮点数列表?

时间:2015-03-19 19:38:46

标签: python python-2.7 csv numpy pandas

我有这样的csv文件:

string, 3.54545,4.3434,3.34435543
string, 4.54545,67.3434,5.34435543
...
stringN, 5.54545,1.3434,9.34435543

如何使用csv模块在两个不同的列表中提取第一个(字符串)和第二个列(浮点数)?。例如,我希望得到这样的结果:

list1 = [string,string,...,string]
list2 = [3.54545,4.54545,..,5.54545]

其中list1是字符串列表,list2是浮点列表。我用pandas尝试了以下内容,问题是需要大量读取文件:

df = pd.read_csv('test_dict.csv', header = None)

list1 = df[0].values.tolist()
list2 = df[1].values.tolist()

先谢谢你,伙计们!

2 个答案:

答案 0 :(得分:2)

如果你想要前两列你可以压缩:

import  csv

with open("in.csv") as f:
    reader = csv.reader(f)
    zipped = zip(*reader)
    s, f = list(next(zipped)), list(map(float, next(zipped)))

对于python 2,请使用itertools.izip:

import  csv
from itertools import  izip

with open("in.csv") as f:
    reader = csv.reader(f)
    zipped = izip(*reader)
    s, f = list(next(zipped)), map(float, next(zipped))
    print(s, f)
 (['string', 'string', 'stringN'], [3.54545, 4.54545, 5.54545])

答案 1 :(得分:2)

你可以像这样使用csv模块,但正如我在评论中所说,不要指望它比使用pandas更快。

import csv

col1 = []
col2 = []

with open('test_dict.csv') as f:
  for row in csv.reader(f):
    col1.append(row[0])
    col2.append(row[1])