【问题标题】:finding the length of a portion of a csv file in python在python中查找部分csv文件的长度
【发布时间】:2022-01-23 01:26:31
【问题描述】:

我正在尝试获取 csv 文件中列的一部分的平均值,但我无法找到长度。我注意到,当我运行 len 时,它计算的是字符数,而不是 2021-2003 年的长度(len 应该是 18)。

*注意:这是一个类,不会使用 pandas

import csv

with open('C:/Users/lblortz/Desktop/LakeMead.csv', newline='') as csv_file:
    list_name = csv.reader(csv_file, delimiter=',')

  index=0
    total=0.0
    count=0.0

    for YEAR, AVGELEVATION, AVGCONTENT, AVGINFLOW, AVGOUTFLOW, AVGHIGHTEMP, AVGLOWTEMP, AVGWATERTEMP in list_name:

        if index != 0:
            if int(YEAR)>=2003:
                print(len(list_name))
                total= float(AVGELEVATION) + total     
        index+=1
        
    count=total/len(list_name)
    print("average is",count)

【问题讨论】:

  • 将您的代码粘贴为文本而不是屏幕截图,编辑您的问题
  • 与您的示例数据相同
  • 您可以使用 pandas 对 csv 进行操作。这是玩牌桌的最佳方式

标签: python csv


【解决方案1】:

欢迎来到 SO。你的代码是相当不错的。

要找到多年的平均值,是的,您在这里遇到了一个问题:

count=total/len(YEAR)

看起来您将len(YEAR) 等同于“YEAR 列中的所有单元格(行)”,但您发现它实际上意味着“存储在变量@987654323 中的值中的字符长度@",然后您在循环中设置该值 - 所以它是您的循环计数的去年的字符长度。

对此的快速解决方法是跟踪计算了多少年:

index=0
total=0.0
count=0.0
years=[]  # create an empty list and add years to it as they are counted
...

        if int(YEAR) >= 2003:
            years.append(YEAR)
            ...

count=total/len(years)

为了处理一般的 CSV,我也推荐这个小改动...

您的索引计数器

看起来index 的存在只是为了说明您是否已经迭代过标头。您可以像这样手动读取第一行(标题)而不做任何事情(丢弃它):

list_name=csv.reader(csv_file)
next(list_name)
...

next() 是 Python 手动迭代 iterable 的方式,这是 csv.reader() 所做的。

【讨论】:

  • 这正是我想要的!谢谢!
  • 不客气。由于这似乎有帮助,请单击此答案的分数下方/旁边的复选标记接受。
猜你喜欢
  • 1970-01-01
  • 2018-04-11
  • 2013-10-27
  • 2010-10-23
  • 2022-10-04
  • 1970-01-01
  • 2021-09-26
  • 2018-02-07
  • 2022-07-23
相关资源
最近更新 更多