2017-09-22 4 views
1
import numpy as np 
import pandas as pd 
import tia.bbg.datamgr as dm 
mgr = dm.BbgDataManager() 

bb_yearb4 = "2016-12-30" 
bb_today = "2017-09-22" 

indices = [list of indices] 
sids_index = mgr[indices] 
df_idx = sids_index.get_historical('PX_LAST', bb_yearb4, bb_today) 

nan = np.nan 

price_test = {} 
for index in indices: 
    price_test["{0}".format(index)] = df_idx.loc[bb_today][index] 

Der Ausgang mehr nan Float-Wert zeigt:python - überprüfen, ob nan Schwimmer im Wörterbuch

In [1]: price_test.values() 
Out[1]: [nan, nan, nan, 47913.199999999997, nan, 1210.3299999999999, nan] 

jedoch Tests für nan zeigen false:

In [2]: nan in price_test.values() 
Out[2]: False 

Was ist der richtige Weg zu Testen Sie das?

+2

'np.nan in price_test.values ​​()' – Wen

+1

@ Wen: Das machen sie schon, und es funktioniert nicht. – user2357112

Antwort

4

NaN ist seltsam, weil NaN! = NaN. Es gibt einen guten Grund dafür, aber es bricht immer noch in checks und alles andere, das normal == Verhalten annimmt.

prüft NaN mit NaN spezifischen Prüfungen, wie numpy.isnan:

any(np.isnan(val) for val in d.values()) 

oder in einem nicht-NumPy Zusammenhang

+1

Vielleicht "math.isnan" statt "val! = Val"? –

+0

@ JonClements: Oh, huh, das ist eine Sache. Ich habe vergessen, dass das Mathematik-Modul tatsächlich ein 'Isnan' hat. – user2357112

+0

@piRSquared: Das NaN in ihrem Diktat ist nicht dasselbe Objekt wie 'np.nan'. Python macht vor '==' hier einen 'ist'-Check, der dich abschreckt. – user2357112

Verwandte Themen