有一个名为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
有一个问题:
Q值。写一个程序,找到维多利亚州最大的访客人数 CSV数据vic_visitors.csv。您的程序应该打印结果 格式"最大的访客数量是' x'在' y'在这一年' z'。
我可以在此处访问数据,以便data_2d通过data_2d[i]=row
和data_2d[i][j]=column
为我提供二维信息:
import csv
visitors=open("vic_visitors.csv")
data=csv.reader(visitors)
data_2d=list(data)
但我对如何检索最大数量的人及其相应的地区和年份感到很遗憾。
答案 0 :(得分:4)
您有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个值插入到模板中来格式化该元组。
使用DictReader.fieldnames
list我们保持灵活性;只要第一列是一个区域,其余部分是年份,代码就会适应任何变化。
演示:
>>> import csv
>>> sample = '''\
... 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
... '''.splitlines(True)
>>> maximum_value = None
>>> reader = csv.DictReader(sample)
>>> 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)
The greatest visitornumber was 1377291 in Melbourne in the year 2007.
答案 1 :(得分:0)
您可以使用以下方法扫描每个条目,并在每次条目超过当前最大值时分配max和max参数。
{{1}}