Python 找出csv文件中字典中的许多项

Python 找出csv文件中字典中的许多项,python,csv,dictionary,Python,Csv,Dictionary,csv文件的内容如下 像这样,它会一直显示csv文件中的列 制造商型号显示年份气缸变速器drv cty hwy fl等级 1奥迪a4 1.8 1999 4 autol5 f 18 29 p紧凑型 2奥迪a4 1.8 1999 4手册M5 f 21 29 p紧凑型 我正在编写一个程序,导入文件csv数据如下 import csv with open('mpg.csv') as csvfile: mpg = list(csv.DictReader(csvfile)) mpg[:3] 输

csv文件的内容如下 像这样,它会一直显示csv文件中的列

制造商型号显示年份气缸变速器drv cty hwy fl等级 1奥迪a4 1.8 1999 4 autol5 f 18 29 p紧凑型 2奥迪a4 1.8 1999 4手册M5 f 21 29 p紧凑型

我正在编写一个程序,导入文件csv数据如下

import csv
with open('mpg.csv') as csvfile:
    mpg = list(csv.DictReader(csvfile))

mpg[:3] 
输出如下

[OrderedDict([('', '1'),
              ('manufacturer', 'audi'),
              ('model', 'a4'),
              ('displ', '1.8'),
              ('year', '1999'),
              ('cyl', '4'),
              ('trans', 'auto(l5)'),
              ('drv', 'f'),
              ('cty', '18'),
              ('hwy', '29'),
              ('fl', 'p'),
              ('class', 'compact')]),
 OrderedDict([('', '2'),
              ('manufacturer', 'audi'),
              ('model', 'a4'),
              ('displ', '1.8'),
              ('year', '1999'),
              ('cyl', '4'),
              ('trans', 'manual(m5)'),
              ('drv', 'f'),
              ('cty', '21'),
              ('hwy', '29'),
              ('fl', 'p'),
              ('class', 'compact')]),
 OrderedDict([('', '3'),
              ('manufacturer', 'audi'),
              ('model', 'a4'),
              ('displ', '2'),
              ('year', '2008'),
              ('cyl', '4'),
              ('trans', 'manual(m6)'),
              ('drv', 'f'),
              ('cty', '20'),
              ('hwy', '31'),
              ('fl', 'p'),
              ('class', 'compact')])]
我想计算csv文件中的项目数。 如果我想计算每列中有多少个对象,即单个列,或者对它们进行一些计算,比如从价格中找到平均值等,那么如何在python中进行计算。我可以很容易地在excel表格中做到这一点,但我不知道该怎么做。 正在尝试查找具有键的列名

import csv
with open('mpg.csv','r') as csvfile:
     reader=csv.reader(csvfile)
     col_name={rows[0]:row[1] for rows in reader}
这给了我错误

NameError                                 Traceback (most recent call last)
<ipython-input-73-ac3bfb72c9e9> in <module>
      2 with open('mpg.csv','r') as csvfile:
      3      reader=csv.reader(csvfile)
----> 4      col_name={rows[0]:row[1] for rows in reader}

<ipython-input-73-ac3bfb72c9e9> in <dictcomp>(.0)
      2 with open('mpg.csv','r') as csvfile:
      3      reader=csv.reader(csvfile)
----> 4      col_name={rows[0]:row[1] for rows in reader}

NameError: name 'row' is not defined
然后我试着做下面的事情

[OrderedDict([('', '1'),
              ('manufacturer', 'audi'),
              ('model', 'a4'),
              ('displ', '1.8'),
              ('year', '1999'),
              ('cyl', '4'),
              ('trans', 'auto(l5)'),
              ('drv', 'f'),
              ('cty', '18'),
              ('hwy', '29'),
              ('fl', 'p'),
              ('class', 'compact')]),
 OrderedDict([('', '2'),
              ('manufacturer', 'audi'),
              ('model', 'a4'),
              ('displ', '1.8'),
              ('year', '1999'),
              ('cyl', '4'),
              ('trans', 'manual(m5)'),
              ('drv', 'f'),
              ('cty', '21'),
              ('hwy', '29'),
              ('fl', 'p'),
              ('class', 'compact')]),
 OrderedDict([('', '3'),
              ('manufacturer', 'audi'),
              ('model', 'a4'),
              ('displ', '2'),
              ('year', '2008'),
              ('cyl', '4'),
              ('trans', 'manual(m6)'),
              ('drv', 'f'),
              ('cty', '20'),
              ('hwy', '31'),
              ('fl', 'p'),
              ('class', 'compact')])]
按气缸数对车辆进行分组,并找出平均cty 每组的mpg。 找到所有车辆的平均cty燃油经济性 汽车。字典中的所有值都是字符串。 查找所有车辆的平均高速燃油经济性
如果您的数据在列表mpg中,您可以使用例如Python统计模块来查找平均值:

注:对于平均hwy燃油,更改hwy的关键cty

用于查找列名,例如:

print(list(mpg[0].keys()))
印刷品:

['', 'manufacturer', 'model', 'displ', 'year', 'cyl', 'trans', 'drv', 'cty', 'hwy', 'fl', 'class']
['18', '21', '20']
仅显示列cty:

印刷品:

['', 'manufacturer', 'model', 'displ', 'year', 'cyl', 'trans', 'drv', 'cty', 'hwy', 'fl', 'class']
['18', '21', '20']
更多关于中的列表理解

编辑:对于分组,可以使用itertools.groupby。这将根据气缸数对车辆进行分组,并找到每组的平均cty mpg:

from statistics import mean
from itertools import groupby

for v, g in groupby(sorted(mpg, key=lambda k: int(k['cyl'])), lambda k: int(k['cyl'])):
    print('Number of cylinders: {}, average cty mpg: {}'.format(v, mean(float(item['cty']) for item in g)))
编辑:从.csv读取:

import csv
from statistics import mean

with open('mpg.csv','r') as csvfile:
    reader=list(csv.DictReader(csvfile, delimiter='\t')) # change the delimiter to what is in your csv file
    print (mean(float(item['cty']) for item in reader))  # note the parenthesis around item['cty']: float(item['cty'])
使用熊猫,因为这正是它的用途 :转到本笔记本并搜索mpg,您会发现类似的汽车数据集探索。
您可以使用len方法,在您的代码中mpg是一个列表。因此,您可以使用:lenmpgok如何继续执行以下1。查找带有键2的列名。查找所有汽车的平均城市燃油经济性。您想在纯python或像pandas这样的库中执行此操作吗?事实上,我正在学习python,所以我想学习的两种方法我都不太了解pandas或basic。你的任何建议都会提高我的知识。我尝试了你的方法来查找mean这里是我的代码导入csv从统计导入mean打开'mpg.csv','r'作为csvfile:reader=listcsv.DictReaderCSV文件打印meanfloatitem['cty']对于读卡器中的项,我收到以下错误类型错误回溯-->5中最后一次调用print Means FloatItem['cty']对于读卡器中的项错误:float参数必须是字符串或数字,而不是“generator”@ss321c我编辑了我的答案。问题是您缺少项目周围的括号,它应该是这样的:floatitem['cty']。好的,我犯了一个错误,您的解决方案正在工作,我只是想了解它是如何工作的我尝试了另一个代码导入csv从统计导入的意思是打开“mpg.csv”,“r”作为csvfile:reader=listcsv.DictReaderCSV文件,用于reader中的项目:l=[item['cty']]new_list=listmapfloat,l res=meannew_list print res此处res我希望打印平均值,但它会打印转换为float的列表。为什么会发生这种情况呢?@ss321c这是因为您正在对csv文件中的行进行迭代,并从只包含一个元素的列表中计算平均值,而这始终是相同的浮点值。请参阅for循环后的语句l=[item['cty']我的理解是,l现在应该是一个字符串列表,即l=[18,22,25,40]所以我的意思是,我应该工作,但在原始文件中,数据存储为字符串,所以我将其转换为浮点值。我不理解的是,我是如何在csv文件中迭代行的。