问题:
我一直在尝试使用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/