如何导入一个CSV文件使用Python与标题完好无损,其中第一列是一个非数字

这是一个前面的问题的详细说明,但是当我更深入地了解python的时候,我对python如何处理csv文件感到困惑。

我有一个csv文件,它必须保持这种方式(例如,不能将其转换为文本文件)。 它相当于一个5行乘11列数组或matrix,或向量。

我一直在尝试使用我在这里和其他地方find的各种方法(例如python.org )来读取csv,以便保留列和行之间的关系,其中第一行和第一列=非数值。 其余的是浮动值,并且包含正浮动和负浮动的混合。

我想要做的是导入csv并在python中编译,所以如果我要引用一个列标题,它会返回存储在行中的相关值。 例如:

 >>> workers, constant, age >>> workers w0 w1 w2 w3 constant 7.334 5.235 3.225 0 age -1.406 -4.936 -1.478 0 

等等…

我正在寻找处理这种数据结构的技术。 我对Python很新。

Python的csv模块逐行处理数据,这是查看这些数据的常用方法。 你似乎想要一个列式的方法。 这是一种做法。

假设您的文件名为myclone.csv并包含

 workers,constant,age w0,7.334,-1.406 w1,5.235,-4.936 w2,3.2225,-1.478 w3,0,0 

这个代码应该给你一个想法或两个:

 >>> import csv >>> f = open('myclone.csv', 'rb') >>> reader = csv.reader(f) >>> headers = reader.next() >>> headers ['workers', 'constant', 'age'] >>> column = {} >>> for h in headers: ... column[h] = [] ... >>> column {'workers': [], 'constant': [], 'age': []} >>> for row in reader: ... for h, v in zip(headers, row): ... column[h].append(v) ... >>> column {'workers': ['w0', 'w1', 'w2', 'w3'], 'constant': ['7.334', '5.235', '3.2225', '0'], 'age': ['-1.406', '-4.936', '-1.478', '0']} >>> column['workers'] ['w0', 'w1', 'w2', 'w3'] >>> column['constant'] ['7.334', '5.235', '3.2225', '0'] >>> column['age'] ['-1.406', '-4.936', '-1.478', '0'] >>> 

为了让你的数值变成浮动,添加这个

 converters = [str.strip] + [float] * (len(headers) - 1) 

在前面,做这个

 for h, v, conv in zip(headers, row, converters): column[h].append(conv(v)) 

为每行而不是上面的类似的两行。

对于Python 2

 import csv with open( <path-to-file>, "rb" ) as theFile: reader = csv.DictReader( theFile ) for line in reader: # line is { 'workers': 'w0', 'constant': 7.334, 'age': -1.406, ... } # eg print( line[ 'workers' ] ) yields 'w0' 

Python有一个强大的内置CSV处理程序。 事实上,大多数东西已经embedded到标准库中了。

对于Python 3

删除rb参数并使用r或不要传递参数( default read mode )。

 with open( <path-to-file>, 'r' ) as theFile: reader = csv.DictReader(theFile) for line in reader: # line is { 'workers': 'w0', 'constant': 7.334, 'age': -1.406, ... } # eg print( line[ 'workers' ] ) yields 'w0' print(line) 

你可以使用pandas库,并像这样引用行和列:

 import pandas as pd input = pd.read_csv("path_to_file"); #for accessing ith row: input.iloc[i] #for accessing column named X input.X #for accessing ith row and column named X input.iloc[i].X