Reputation: 1
File looks like 3 columns of integer numbers. This is what I have But it is returning me TypeError: slice indices must be integers or None or have an index method
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
Upvotes: 0
Views: 1510
Reputation: 77857
I can't test the solution since you failed to provide a Minimal, complete, verifiable example, but I think I see your problem:
mid = len(first_col)/2
if ...
lowerQ = statistics.median(sortedData[:mid])
upperQ = statistics.median(sortedData[mid:])
If first_col
has an odd quantity of elements, then mid
is a float value, such as 7.5. You can't use that as a string slice index. Try integer division instead:
mid = len(first_col) // 2
Depending on your local definition of "quartile" boundary, you may need to add 1.
Upvotes: 1