将CSV列转换为列表

时间:2015-02-02 17:48:10

标签: python arrays list csv

说我有一个CSV文件。 它包含:

a,b,c
1,2,3
4,5,6
7,8,9

如何将标有“a”的列转换为列表,而不对其进行硬编码?

最初,我正在为第一行a,b,c做一个readline,然后对每个变量进行硬编码。但后来我想:如果我想这样做可能会导致CSV文件的排列方式不同 - 比如说:

b,a,c
2,1,3
5,4,6
8,7,9

最好的方法是什么?

3 个答案:

答案 0 :(得分:7)

csv.DictReader将CSV文件的每一行转换为字典,列标题为键。对于您的情况(假设您的问题中的两个示例分别命名为abc.csvbac.csv),您可以像这样使用它:

from csv import DictReader

with open("abc.csv") as f:
    a1 = [row["a"] for row in DictReader(f)]

with open("bac.csv") as f:
    a2 = [row["a"] for row in DictReader(f)]

# a1 == a2 == ['1', '4', '7']

答案 1 :(得分:7)

您可以使用pandas库执行此操作:

import pandas

data = pandas.read_csv("test.csv", header=0)
col_a = list(data.a)
col_b = list(data.b)
col_c = list(data.c)

col_acol_bcol_c中的值如下:

[1, 4, 7]
[2, 5, 8]
[3, 6, 9]

答案 2 :(得分:1)

您可以使用collections.defaultdict

import collections
my_dict = collections.defaultdict(list)
with open('your_file') as f:
    header = next(f).strip().split(',')
    for x in f:
         x = x.strip().split(',')
         my_dict[header[0]].append(x[0])
         my_dict[header[1]].append(x[1])
         my_dict[header[2]].append(x[2])