Проблема вызывает
lista = a.copy()
, потому что a
является нормальным списком, но исходный lista
был numpy.ndarray
и позже stats.zscore()
имеет проблемы при работе с этим списком.
Вы нужно создать numpy.array
.
И ему нужен тип данных float
, np.float
или "float64"
(по крайней мере, на моем компьютере).
lista = np.array(a).astype('float64')
import numpy as np
from scipy import stats
def removeout(lista):
a = []
#print('[DEBUG] first')
#print('[DEBUG]', type(lista), lista.dtype)
z = np.abs(stats.zscore(lista))
while any(i > 3 for i in z):
for i, n in zip(lista, z):
if i is 'Nan':
a.append('Nan')
continue
elif n <= 3:
b = i
elif n > 3:
b = 'Nan'
a.append(b)
lista = np.array(a).astype('float64')
#print('[DEBUG] second')
#print('[DEBUG]', type(lista), lista.dtype)
z = np.abs(stats.zscore(lista))
return lista
list1 = np.random.normal(500, 100, 1000)
#print('[DEBUG] start')
#print('[DEBUG]', type(list1), list1.dtype)
new_list = removeout(list1)
print(new_list)