如何循环索引并保留关联的行信息?

时间:2018-01-22 15:32:39

标签: python arrays list for-loop indexing

我的函数中有一个循环,应该找到最大速率,最小速率和计算平均值,我写的函数是正确的,但是当我找到时,如何保留行信息我的数据中的最大值和最小值?我是python的初学者,但这是我的循环。

    max_rate = -1 
    min_rate = 25 
    count = 0 
    sum = 0
    with open(file_names, "r") as file_out:
   # skips the headers in the file
      next(file_out)
      for line in file_out: 
         values = line.split(",")
 # since rate is index 6 that is what we are going to compare to values above
        if float(values[6]) > max_rate: 
           max_rate = float(values[6])
        if float(values[6]) < min_rate:
           min_rate = float(values[6])
     count += 1
  # sum up all rates in the rates column
     sum = float(values[6]) + sum 
     avg_rate = sum / count
     print(avg_rate)

我打印平均值只是为了测试我的功能。希望我提出的问题是有道理的,我不仅仅想要第6个索引,但我希望其余的行信息具有最小值或最大值。一个例子是获取公司名称,州,邮政编码和费率。不要担心缩进,我不知道我是否在代码块中将其格式化,但所有缩进都在我的代码块中。

3 个答案:

答案 0 :(得分:1)

试试这个:

max_rate = []
min_rate = [] 
count = 0
total = 0

with open(file_names, "r") as file_out:
  # skips the headers in the file
  next(file_out)

  # reset max, min, total sum and count
  max_rate = []
  min_rate = []
  total = 0
  count = 0
  for line in file_out: 
    values = line.split(",")
    max_rate = max(values, max_rate or values, key=lambda x: x[6])
    min_rate = min(values, min_rate or values, key=lambda x: x[6])

    # sum up all rates in the rates column
    total += float(values[6])
    count += 1

  avg_rate = total / count
  print(avg_rate)

这将按照您的意图将与第6列相关的minmax的整个列表归因于此。仅当max_rate不为空(在for循环的第一次交互中将是这种情况)时,max_rate or values代码才会评估valuesmax_rate列表之间的最大值,这将阻止IndexErrormin_rate

也是如此

我对您的代码所做的一项重要更改是变量sum的名称。这是一个Python注册的关键字,将它用作变量名称并不是一个好习惯,所以更喜欢使用totaltotal_sum之类的内容。

答案 1 :(得分:1)

您似乎正在使用CSV或其他类似表格的数据。 Pandas处理得非常好。一个例子是:

import pandas as pd

df = pd.read_csv('something.csv')
print(df)

print(f'\nMax Rate: {df.rate.max()}')
print(f'Avg Rate: {df.rate.mean()}')
print(f'Min Rate: {df.rate.min()}')
print(f'Last Company (Alphabetically): {df.company_name.max()}')

收率:

    company_name         state    zip    rate
0  Company1 Inc.         Texas  76189  0.6527
1  Company2 LLC.  Pennsylvania  18657  0.7265
2  Company3 Corp       Indiana  47935  0.5267

Max Rate: 0.7265
Avg Rate: 0.6353
Min Rate: 0.5267
Last Company (Alphabetically): Company3 Corp

答案 2 :(得分:0)

这些建议很棒。谢谢,我还发现我可以将行分配给if语句下面的变量。然后在我的函数的开头,我可以将这些变量分配给一个空字符串。像

info_high = ""
info_low = ""
info_high = line 
info_low = line 

它将能够保存我需要的行信息,然后我只会索引我需要的信息。