使用dictreader访问列

时间:2016-10-29 14:37:11

标签: python list csv dictionary

问题

我一直在尝试使用python的dictreader从csv文件中找到列的平均值。

我试过

使用列名访问这样的列,这是有效的,但列名是必需的,我不确定如何循环reader.fieldnames以一种方式从每个单独的列构建列表而不是混合所有列数据进入同一个清单:

          for r in reader:
            print(r.get("Price"))

循环示例

for i in reader.fieldnames:
    for r in reader:
        print(row.get(i))

这很好,但是每行打印出1个元素。这使得很难汇总所有价格,所有名称等的列表,因为它只是以列表形式重建dictreader。

问题

如何从dictreader中读取一个完整的列,以便我可以单独作为列表访问每个列并对其执行操作?

注意:到目前为止,我已尝试使用循环追加每个元素,但会产生一个N大小的数组,每行包含4个元素。

3 个答案:

答案 0 :(得分:2)

您可以使用pandas模块。它非常强大,可以处理csv文件。

import pandas as pd
df = pd.read_csv(csv_file)
saved_column = df['column_name']

答案 1 :(得分:1)

如果您想要阅读的每个列都对文件进行一次循环,只需构建对列表推导的理解:

=SUMPRODUCT((A1:A10={"One","two","three","four"})*{1,2,3,4})

实际上并没有更好的方法,只是基于文件的性质... csv是一系列行,将它们变成列会有点浪费。如果你只想提取某些字段名,你可以修改它。

如果你真的只需要读一次文件,那么:

columns = {fieldname: [row.get(fieldname) for row in reader] for fieldname in reader.fieldnames}

答案 2 :(得分:1)

value

使用普通读者对象,获取标题,转置数据,将标题与数据结合起来创建字典。

data.csv:
'''
one, two, three
1,2,3
4,5,6
7,8,9
10,11,12
'''
import csv
with open('data.csv') as f:
    reader = csv.reader(f)
    headers = next(reader)
    # transpose the data
    # --> columns become rows and rows become columns
    data = zip(*reader)
    # create a dictionary by combining the headers with the data
    d = dict(zip(headers, data))