问题:

我一直在尝试使用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个元素。

最佳答案

如果您可以为要阅读的每一列循环一次文件,则只需构建一个列表理解的dict理解即可:

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


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

但是,如果您确实只需要读取一次文件,则:

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

关于python - 使用dictreader访问列,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40320170/

10-12 20:58