Я вижу, что происходит несколько проблем. Я не уверен, почему вы сортируете свои данные, если вы все знаете точные значения, которые вы ищете. Я не уверен, почему вы также разделили данные на отдельные переменные. Двойные циклы «for» означают, что вы повторяете все в «sort» для каждого отдельного ключа в freq_dict. Не уверен, что вы хотели повторить все эти значения несколько раз. Кроме того, freq_dict.items () создает кортежи (ключ, пары значений), поэтому ваш «ключ» является кортежем, поэтому «ключ» никогда не будет равняться float. Во всяком случае, здесь есть попытка переписать некоторый код.
import csv, numpy
import matplotlib.pyplot as plt
from scipy import stats
data = csv.reader(file1) #Read file.
f_data = filter(lambda (x,f,y):f<2332.0,data) #Filter data to condition.
x,_,y = list(zip(*f_data)) #Split data down column.
#Standard linear stats function.
slope,intercept,r_value,p_value,std_err = stats.linregress(x,y)
#Plot the data and the fit line.
plt.scatter(x,y)
plt.plot(x,numpy.array(x)*slope+intercept)
plt.show()