如何在Python2.7中从csv读取数据中找到最大数量?

如何在Python2.7中从csv读取数据中找到最大数量?,python,file,python-2.7,csv,Python,File,Python 2.7,Csv,有一个名为vic_visitors.CSV的CSV,其中包含以下数据: Victoria's Regions,2004,2005,2006,2007 Gippsland,63354,47083,51517,54872 Goldfields,42625,36358,30358,36486 Grampians,64092,41773,29102,38058 Great Ocean Road,185456,153925,150268,167458 Melbourne,1236417,1263118,1

有一个名为vic_visitors.CSV的CSV,其中包含以下数据:

Victoria's Regions,2004,2005,2006,2007
Gippsland,63354,47083,51517,54872
Goldfields,42625,36358,30358,36486
Grampians,64092,41773,29102,38058
Great Ocean Road,185456,153925,150268,167458
Melbourne,1236417,1263118,1357800,1377291
还有一个问题是:

编写一个程序,从中找出维多利亚州最大的游客数量 CSV数据vic_visitors.CSV。您的程序应将结果打印在 格式为“最大访问人数为'z'年'y'中的'x'

在此之前,我可以访问数据,以便data_2d以二维形式提供信息,其中
data_2d[I]=行
data_2d[I][j]=列

import csv
visitors=open("vic_visitors.csv")
data=csv.reader(visitors)
data_2d=list(data)

但是我对如何检索最大人数及其对应的地区和年份感到非常困惑。

您有4个问题需要解决:

  • 您需要保留列标题,以便能够正确地报告年份
  • csv
    将所有内容作为字符串提供,同时您需要以数字形式比较这些值
  • 您需要找到每行的最大值
  • 您需要通过给定行的最大值来查找最大行
您可以使用
DictReader()
来求解第一部分。您可以在读取文件时将值转换为整数,也可以在确定最大值时转换值。您可以在读取时或在执行最后一步时一次性确定每行的最大值

在阅读时,我会尽可能多地丢弃过程中不需要的任何数据:

import csv

maximum_value = None
with open("vic_visitors.csv", 'rb') as visitors:
    reader = csv.DictReader(visitors)
    for row in reader:
        count, year = max((int(row[year]), year) for year in reader.fieldnames[1:])  # skip the first column
        if not maximum_value or count > maximum_value[0]:
            maximum_value = (count, row[reader.fieldnames[0]], year)

print "The greatest visitornumber was {} in {} in the year {}.".format(
    *maximum_value)
max(…)
行在每行字典(使用CSV的第一行作为键)中的键值对上循环,选择年份列(因此除第一个字段外的所有字段)。通过将数值放在第一位,您可以获得该行的最大列值,并与年份配对

然后,我们存储到目前为止发现的最大行信息(仅存储计数、区域和年份);无需保留任何其他行。然后,通过将这3个值插入模板,在最后格式化该元组

通过使用,我们可以保持这种灵活性;只要第一列是一个区域,其余的是年,代码就会适应任何更改

演示:


您有4个问题需要解决:

  • 您需要保留列标题,以便能够正确地报告年份
  • csv
    将所有内容作为字符串提供,同时您需要以数字形式比较这些值
  • 您需要找到每行的最大值
  • 您需要通过给定行的最大值来查找最大行
您可以使用
DictReader()
来求解第一部分。您可以在读取文件时将值转换为整数,也可以在确定最大值时转换值。您可以在读取时或在执行最后一步时一次性确定每行的最大值

在阅读时,我会尽可能多地丢弃过程中不需要的任何数据:

import csv

maximum_value = None
with open("vic_visitors.csv", 'rb') as visitors:
    reader = csv.DictReader(visitors)
    for row in reader:
        count, year = max((int(row[year]), year) for year in reader.fieldnames[1:])  # skip the first column
        if not maximum_value or count > maximum_value[0]:
            maximum_value = (count, row[reader.fieldnames[0]], year)

print "The greatest visitornumber was {} in {} in the year {}.".format(
    *maximum_value)
max(…)
行在每行字典(使用CSV的第一行作为键)中的键值对上循环,选择年份列(因此除第一个字段外的所有字段)。通过将数值放在第一位,您可以获得该行的最大列值,并与年份配对

然后,我们存储到目前为止发现的最大行信息(仅存储计数、区域和年份);无需保留任何其他行。然后,通过将这3个值插入模板,在最后格式化该元组

通过使用,我们可以保持这种灵活性;只要第一列是一个区域,其余的是年,代码就会适应任何更改

演示:


您可以使用以下方法扫描每个条目,并在每次条目超过当前最大值时指定max和max参数

import csv
with open('vic_visitors.csv') as f:
    reader = csv.DictReader(f)
    max = 0     
    for row in reader:
        if(float(row['2004'])>max):
            max = float(row['2004'])
            maxyear = '2004'
            maxloc = row["Victoria's Regions"]
        if(float(row['2005'])>max):
            max = float(row['2005'])
            maxyear = '2005'
            maxloc = row["Victoria's Regions"]
        if(float(row['2006'])>max):
            max = float(row['2006'])
            maxyear = '2006'
            maxloc = row["Victoria's Regions"]  
        if(float(row['2007'])>max):
            max = float(row['2007'])
            maxyear = '2007'
            maxloc = row["Victoria's Regions"]          

print("The greatest visitornumber was "+ str(max) +" in " +maxloc+ " in  the year "+maxyear)

您可以使用以下方法扫描每个条目,并在每次条目超过当前最大值时指定max和max参数

import csv
with open('vic_visitors.csv') as f:
    reader = csv.DictReader(f)
    max = 0     
    for row in reader:
        if(float(row['2004'])>max):
            max = float(row['2004'])
            maxyear = '2004'
            maxloc = row["Victoria's Regions"]
        if(float(row['2005'])>max):
            max = float(row['2005'])
            maxyear = '2005'
            maxloc = row["Victoria's Regions"]
        if(float(row['2006'])>max):
            max = float(row['2006'])
            maxyear = '2006'
            maxloc = row["Victoria's Regions"]  
        if(float(row['2007'])>max):
            max = float(row['2007'])
            maxyear = '2007'
            maxloc = row["Victoria's Regions"]          

print("The greatest visitornumber was "+ str(max) +" in " +maxloc+ " in  the year "+maxyear)