2013-08-26 8 views

Odpowiedz

8

Co powiesz na to. Najpierw sprawdź Koncepcja nieliczby są w tym samym miejscu (za pomocą 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 

Następnie sprawdzić wartości, które nie są NaN są równe (przy użyciu 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 

Aby być równa my oba muszą być prawdziwe:

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

Można również sprawdzić nazwę itp., jeśli to nie było wystarczające.

Jeśli chcesz podbiciem jeśli są one różne, należy assert_series_equal od pandas.util.testing:

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

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

To działa, szkoda, że ​​zgłasza wyjątek, a nie tylko powrót False. –

+0

@DunPeal dodał aktualizację, która robi to, co trzeba. –

+0

dzięki, to działa dobrze. Wydaje mi się, że Panda może mieć sens, aby dodać metodę, która streszcza ten mały fragment do serii. –

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, twoje rozwiązanie ignoruje pozycję NaN: '(Series ([1, nan]). Dropna() == Series ([nan, 1]). Dropna()). All() # => True' –

+0

tak ... naprawdę właściwą drogą jest '' assert_series_equal'', jak pokazuje Andy powyżej – Jeff

Powiązane problemy