我需要在不使用numpy和pandas的情况下在csv文件中计算第一和第三四分位数

时间:2019-02-22 18:15:52

标签: python python-3.7

文件看起来像3列整数。这就是我所拥有的 但是它返回了TypeError:切片索引必须是整数或无,或者具有 index 方法

import statistics

file = open("PokemonF.csv","r")
first_col=[]
sec_col=[]
third_col=[]
columns=[first_col]
for line in file :
    data = line.split(',')
    first_col.append(int(data[0]))
    sec_col.append(int(data[1]))
    third_col.append(int(data[2]))
for col_ in columns:
    min_col = min(first_col)
    sortedData = sorted(first_col)
    mid = len(first_col)/2
    if len(sortedData) % 2 == 0:
        lowerQ = statistics.median(sortedData[:mid])
        upperQ = statistics.median(sortedData[mid:])
    else:  
        lowerQ = statistics.median(sortedData[:mid])
        upperQ = statistics.median(sortedData[mid+1:])
    median_col = statistics.median(first_col)
    max_col = max(first_col)


    print("Minimum: {}".format(min_col))
    print("First quartile: {}".format(lowerQ))
    print("Median: {}".format(median_col))
    print("Maximum: {}".format(max_col))
file.close

1 个答案:

答案 0 :(得分:0)

由于您未能提供Minimal, complete, verifiable example,因此我无法测试该解决方案,但我认为我看到了您的问题:

mid = len(first_col)/2
if ...
    lowerQ = statistics.median(sortedData[:mid])
    upperQ = statistics.median(sortedData[mid:])

如果first_col的元素数量为奇数,则mid是一个浮点值,例如7.5。您不能将其用作字符串切片索引。尝试使用整数除法:

mid = len(first_col) // 2

根据您对“四分位数”边界的本地定义,您可能需要添加1。