2013-08-26 20 views

cevap

8

Buna ne dersiniz? İlk (isnull kullanarak) NaN'ler aynı yerde olup olmadığını kontrol edin:

In [13]: s1[s1.notnull()] 
Out[13]: 
0 1 
dtype: float64 

In [14]: s1[s1.notnull()] == s2[s2.notnull()] 
Out[14]: 
0 True 
dtype: bool 

eşit olmamız bulunmak için:

In [11]: s1.isnull() 
Out[11]: 
0 False 
1  True 
dtype: bool 

In [12]: s1.isnull() == s2.isnull() 
Out[12]: 
0 True 
1 True 
dtype: bool 

Ardından eşit (notnull kullanarak) vardır NaN olmayan değerleri kontrol Her iki true gerekir: bu yeterli değildi

In [15]: (s1.isnull() == s2.isnull()).all() and (s1[s1.notnull()] == s2[s2.notnull()]).all() 
Out[15]: True 

Ayrıca adı vb kontrol edebilir. farklıysa eğer zam istiyorsanız

, pandas.util.testing den assert_series_equal kullanın: Bu işler

In [21]: from pandas.util.testing import assert_series_equal 

In [22]: assert_series_equal(s1, s2) 
+0

, çok kötü sadece yanlış dönmeden yerine bir özel durum oluşturur. –

+0

@DunPeal, doğru olanı yapan bir güncelleme ekledi. –

+0

teşekkürler, bu iyi çalışıyor. Pandaların bu küçük parçacığı seri olarak özetleyen bir yöntem eklemesinin mantıklı olacağını düşünüyorum. –

0
In [16]: s1 = Series([1,np.nan]) 

In [17]: s2 = Series([1,np.nan]) 

In [18]: (s1.dropna()==s2.dropna()).all() 
Out[18]: True 
+0

Jeff, çözümünüz NaN'lerin konumunu göz ardı eder: '(Seri ([1, nan]) .sayra() == Serisi ([nan, 1]). Dropna()) all() # => Doğru –

+0

yep .... Andy yukarıda gösterildiği gibi gerçekten doğru yol '' assert_series_equal'' dir – Jeff