2015-11-05 19 views
7

Sto cercando di confrontare due dataframe che dovrebbero essere identici. Tuttavia a causa della precisione in virgola mobile mi viene detto che i valori non corrispondono. Ho creato un esempio per simularlo di seguito. Come posso ottenere il risultato corretto in modo che il dataframe di confronto finale restituisca true per entrambe le celle?Precisione del punto di confronto del punto di panda e del punto di virgola mobile

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 

risposta

9

OK è possibile utilizzare np.isclose per questo:

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

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

np.isclose prende relativa tolleranza e la tolleranza assoluta. Questi hanno valori predefiniti: rtol=1e-05, atol=1e-08 rispettivamente

+0

Questo è perfetto, grazie a @EdChum. Per riferimento per ottenere un risultato dataframe come lo stesso tipo del controllo di uguaglianza originale che ho fatto: 'print pd.DataFrame (np.isclose (a, b), columns = a.columns, index = a.index)' A 0 True 1 True – PH82

Problemi correlati