我的函数中有一个循环,应该找到最大速率,最小速率和计算平均值,我写的函数是正确的,但是当我找到时,如何保留行信息我的数据中的最大值和最小值?我是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个索引,但我希望其余的行信息具有最小值或最大值。一个例子是获取公司名称,州,邮政编码和费率。不要担心缩进,我不知道我是否在代码块中将其格式化,但所有缩进都在我的代码块中。
答案 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列相关的min
和max
的整个列表归因于此。仅当max_rate不为空(在for循环的第一次交互中将是这种情况)时,max_rate or values
代码才会评估values
和max_rate
列表之间的最大值,这将阻止IndexError
。 min_rate
我对您的代码所做的一项重要更改是变量sum
的名称。这是一个Python注册的关键字,将它用作变量名称并不是一个好习惯,所以更喜欢使用total
或total_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
它将能够保存我需要的行信息,然后我只会索引我需要的信息。