我需要帮助写一个python代码,可以使用csv模块从csv文件读取数据,不能使用pandas,然后在这种情况下找到每行1-31的平均值。如果月数/行的变化。我不断得到一个索引错误,只是撞我的头在墙上在这一点上。我的大部分经验是在C编程我老,相对较新python。任何帮助都非常感谢。这是我到目前为止的代码。
我在第一个for循环中得到一个错误- indexerror:list index out of range
我很困惑这是怎么发生的,因为我把平均值设置为一个空列表,这需要是一个全局变量设置为0还是一个0值元素的列表?
下面是我目前为止的代码,以及我正在使用的csv数据的示例。
with open("RADIOLOGY.csv") as file:
data = file.readlines()
def compute_averages(data):
if not data:
return []
# num_months = len(data[0:].split()) - 1 # Calculate the number of months
num_months = len([row.split()[0] for row in data])
print(num_months)
print(len(data))
# averages = [1] * num_months
averages = []
for row in data:
values = row.split()
for i in range(num_months):
if i < len(values) - 1:
averages[i] += float(values[i - 1])
for i in range(num_months):
averages[i] /= len(data)
return averages
def driver():
if len(data) < 1:
print("Not enough data to compute averages.")
return
# Assuming the first row contains headers and the first column contains observations
headers = data[0].split()
observations = [row.split()[0] for row in data]
averages = compute_averages(data)
print(f"Number of months: {len(headers) - 1}")
print("Averages for each observation:")
for i, observation in enumerate(observations):
print(f"{observation}: {averages[i]}")
if __name__ == "__main__":
driver()
字符串
1条答案
按热度按时间ve7v8dk21#
看来你的代码的主要问题是你初始化和更新
averages
列表的方式。因为你从一个空列表[]
开始,试图在你的循环中访问averages[i]
将导致一个IndexError
,因为列表中还没有任何元素。字符串
为了解决这个问题,你应该像上面提到的那样将每个月的平均值初始化为零。假设你的代码中的文件阅读和数据解析部分都能提供所需的结果,这里是你的代码的修订版本,没有任何文件处理,只关注逻辑:
型
输出量:
型
上面的代码假设CSV文件的第一行包含标题,并且每行的第一列不是平均值计算的一部分。此外,它假设数据行中没有缺失值。如果我的假设不准确,您可能需要相应地调整代码。此外,我使用格式`{averages[i]:.2f}用于打印具有两位小数的平均值。