2013-08-26 13 views

Antwort

8

Wie wäre es damit. Überprüfen Sie zunächst die NaNs sind an der gleichen Stelle (mit isnull):

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 

dann die Werte überprüfen, die nicht NaN gleich sind (mit notnull):

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 

Um gleich wir zu sein müssen beide wahr sein:

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

Sie können auch überprüfen, Name usw., wenn dies nicht ausreichend war.

Wenn Sie erhöhen wollen wenn sie unterschiedlich sind, verwenden assert_series_equal von pandas.util.testing:

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

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

Dies funktioniert, schade es löst eine Ausnahme und nicht nur falsch zurück. –

+0

@DunPeal hat ein Update hinzugefügt, das das Richtige tut. –

+0

danke, das funktioniert gut. Ich denke, es könnte für Pandas Sinn machen, eine Methode hinzuzufügen, die dieses kleine Snippet zu Series abstrahiert. –

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, deine Lösung ignoriert die Position der NaNs: '(Reihe ([1, nan]). Dropna() == Reihe ([nan, 1]). Dropna()). All() # => Wahr ' –

+0

yep .... wirklich der richtige Weg ist '' assert_series_equal'' wie Andy oben zeigt – Jeff

Verwandte Themen