2013-08-26 24 views

Trả lời

8

Làm thế nào về điều này. Đầu tiên kiểm tra Nans đang ở trong cùng một vị trí (sử dụng 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 

Sau đó kiểm tra các giá trị mà không phải là NaN đều bình đẳng (sử dụng 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 

Để được chúng tôi bằng cần cả hai phải là True:

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

Bạn cũng có thể kiểm tra tên, v.v. nếu điều này không đủ.

Nếu bạn muốn tăng nếu họ là khác nhau, sử dụng assert_series_equal từ pandas.util.testing:

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

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

này hoạt động, quá xấu nó đặt ra một ngoại lệ chứ không phải chỉ trở về False. –

+0

@DunPeal đã thêm bản cập nhật làm điều đúng. –

+0

cảm ơn, điều này hoạt động tốt. Tôi nghĩ rằng nó có thể có ý nghĩa đối với Pandas để thêm một phương thức tóm tắt đoạn mã nhỏ này vào Series. –

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, giải pháp của bạn bỏ qua vị trí của NaN: '(Series ([1, nan]). Dropna() == Series ([nan, 1]). Dropna()). All() # => True' –

+0

yep .... thực sự đúng cách là '' assert_series_equal'' như Andy hiển thị ở trên – Jeff