2015-07-02 10 views
7

'dan çok farklıdır. Aşağıdaki gibi iki parçacık kodum var.Pandalar: pandas.Series.std() neden numpy.std()

import numpy 
numpy.std([766897346, 766897346, 766897346, 766897346, 766897346, 766897346, 766897346, 766897346, 766897346, 766897346]) 
0 

ve çok büyük bir fark var

import pandas as pd 
pd.Series([766897346, 766897346, 766897346, 766897346, 766897346, 766897346, 766897346, 766897346, 766897346, 766897346]).std(ddof=0) 
10.119288512538814 

.

Neden olduğunu sorabilir miyim?

+1

/pydata/pandalar/sorunları)? – EdChum

+0

Zaten bildirilen ve burada yanıtladı: https://github.com/pydata/pandas/issues/10489 – joris

+0

Konudaki tartışmadan: düzeltilinceye kadar olası bir çözüm, darboğaz yüklü olduğundan emin olmaktır. – joris

cevap

2

Bu sorun gerçekten de tartışılıyor (link); problem, pandas tarafından kullanılan standart sapmayı hesaplamak için kullanılan algoritmadır, çünkü numpy tarafından kullanılan numara kadar kararlı değildir.

Kolay bir çözüm, önce .values dizisini uygulamak ve sonra bu değerlere std uygulamak; Bu durumda numpy'sstd kullanılır: size beklenen değerini verir

pd.Series([766897346, 766897346, 766897346, 766897346, 766897346, 766897346, 766897346, 766897346, 766897346, 766897346]).values.std() 

0. Bu, bir [sorunu] (https://github.com gönderebilir bana pandalar bir hata gibi görünüyor

+0

Daha önce algoritma farkını fark ettim. İşte, bunun sebebi olduğunu düşünmüyorum. Eğer '0' sonucunu almak istiyorsanız, pay '0' olmalıdır. Yani, numpy veya pandalar olursa olsun, sonuç, '0' ile aynı olmalıdır, çünkü farkları sadece payda ile ilgilidir. Yani bence burada bir böcek. – Tony

+0

Bu bir hatadır, katılıyorum. Bu yüzden bu konuyu, tartışıldığı ve iş çevresinde sunacağı iş parçacığına gönderdim. Kabul edeceğiniz bu soruya verilen cevaptan başka ne beklediniz? :) Hata, kullanılan algoritmaya dayanır (varyans ve standart sapma birbirine çok yakındır). – Cleb

+0

Böceğin algoritma ile ilgili olduğunu düşünmüyorum. Numpy için, std 1/n tarafından tarafsızdır. Pandalar için, std 1/(n - 1) tarafından önyargılıdır. Bu onların algoritmalarının farkı. Yani burada, pandaların sonucu 0'dır. Bu ilginç 0 için, hangi algoritma olursa olsun, aynı olmalıdır. Bunu görebiliyor musun? Çünkü A * 1/(n - 1) = 0 ise, o zaman A * 1/n = 0 olur. Sanırım orada aptal bir böcek olabilir, ama üzgünüm izleyecek zamanım yok. Neyse, nazik yardımlarınız için çok teşekkürler. – Tony