通过索引读取csv文件中的列

时间:2019-06-10 14:00:27

标签: python pandas csv

我想创建一个程序,在其中读取CSV文件并写入另一个文件。我的问题是,我准备好的文件有点大,我不想这样做:

columns = defaultdict(list)
reader = csv.DictReader(csvfile)       
for row in reader:               
    for (k,v) in row.items(): 
          columns[k].append(v) 
print(columns['name'])
print(columns['id'])
...

相反,我想做columns[0]来找到'name',依此类推。有什么办法可以做到吗?

2 个答案:

答案 0 :(得分:0)

您现在正在使用DictReader阅读CSV,这会根据名称创建列,在您的情况下,您可以只使用reader

columns = defaultdict(list)
reader = csv.reader(csvfile)  
next(reader) # to skip the header row     
for row in reader:               
    for i, v in enumerate(row): 
          columns[i].append(v) 
print(columns[0])
print(columns[1])

答案 1 :(得分:0)

我不确定我是否理解您的问题。如果您问“我只能阅读第一列吗?”,那么简短的回答是“否”。 CSV专为从可变长度记录中读取固定数量的列而设计。更具体地说,数据被组织为行列表,而不是列列表。您不能只是过去不想阅读的内容。听起来您想做的是将数据重新组织成列。

如果要最大程度地减少阅读内容的处理,听起来您需要做的就是使用csv.reader并跳过包含标题的第一行。读者的每一行都将返回一个字符串列表,并且该列表的构造应比映射便宜。

如果收集行列表,则可以将其放在numpy array中。 numpy数组将允许您访问列(例如x[:, 0])或行(例如x[0, :])。

鉴于我不确定您要问的是什么,我的答案可能并非您要找的。但是,无论您遇到什么问题,我都可以肯定您无法避免读取整个文件。