2015-11-05 22 views
7

Szukam porównania dwóch ramek danych, które powinny być identyczne. Jednak z powodu precyzji zmiennoprzecinkowej powiedziano mi, że wartości się nie zgadzają. Stworzyłem przykład do symulacji poniżej. Jak uzyskać poprawny wynik, aby ostateczna ramka danych porównania przyniosła wynik true dla obu komórek?Porównanie Pand i DataFrame i precyzja zmiennoprzecinkowa

a = pd.DataFrame({'A':[100,97.35000000001]}) 
b = pd.DataFrame({'A':[100,97.34999999999]}) 
print a 

    A 
0 100.00 
1 97.35 

print b 

    A 
0 100.00 
1 97.35 

print (a == b) 

    A 
0 True 
1 False 

Odpowiedz

9

OK można użyć np.isclose na to:

In [250]: 
np.isclose(a,b) 

Out[250]: 
array([[ True], 
     [ True]], dtype=bool) 

np.isclose trwa względnej tolerancji i bezwzględnej tolerancji. Te mają domyślne wartości: rtol=1e-05, atol=1e-08 odpowiednio

+0

To jest idealne, dzięki @EdChum. Aby uzyskać odniesienie do uzyskania wyniku ramek danych jako tego samego typu co oryginalna kontrola równości, zrobiłem: 'print pd.DataFrame (np.isclose (a, b), columns = a.columns, index = a.index)' A 0 Prawda 1 Prawda – PH82