Имеет ли массив, возвращаемый .values ​​из pandas DataFrame, разную точность? - PullRequest
0 голосов
/ 26 июня 2019

Вычисление std () для столбца панд Я заметил, что он отличается от std (), вычисляемого из массива numpy, возвращаемого из того же столбца методом .values.Есть ли разница в точности?

length = 5
fill = np.random.randn(length)
df2 = pd.DataFrame(index=range(length), columns = ["test"])
df2.test = fill
pandas = df2.iloc[:,0]
array = df2.iloc[:,0].values
print(f"pandas std: {pandas.std():0.6f}, numpy std: {array.std():0.6f}")
print(f"Difference: {(pandas.std()/array.std()-1)*100:0.2f}%")

pandas std: 0.764161, numpy std: 0.683486 Разница: 11.80%

С небольшим числом (здесь 5) разница весьма ощутима.Скажем, только с 2 числами разница возрастает до 40%.Числа в пандах и в результирующем массиве также различаются по точности, но я подумал, что это просто потому, что панды просто отображают 6 цифр, сохраняя всю десятичную длину ..

1 Ответ

1 голос
/ 26 июня 2019

Это не имеет ничего общего с точностью значений с плавающей запятой;скорее это результат коррекции Бесселя , применяемой pandas, но не numpy.

Короче говоря, для обеих функций есть параметр ddof, который определяет, как«необработанная» дисперсия (квадрат стандартного отклонения) будет обработана.

Для numpy значение по умолчанию равно 0, что означает, что оно возвращается без изменений.

С другой стороны, pandas, значение по умолчанию равно 1, что означает, что оно равноДисперсия, вычисленная на numpy, умноженная на N / (N - 1), где N - количество имеющихся у вас точек данных.Если вы вызовете std(ddof=0) для объекта pandas, он вернет тот же результат, что и numpy.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...