2017-09-22 5 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] 

La sortie affiche plusieurs valeurs float nan:python - vérifier si float nan dans le dictionnaire

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

Cependant, les tests pour nan Expositions L'faux:

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

Quelle est la bonne façon tester cela?

+2

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

+1

@ Wen: Ils le font déjà, et ça ne marche pas. – user2357112

Répondre

4

NaN est étrange, car NaN! = NaN. Il y a une bonne raison à cela, mais elle brise encore les vérifications in et tout ce qui suppose un comportement normal de ==.

Vérifier NaN avec des contrôles spécifiques NaN, comme numpy.isnan:

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

ou dans un contexte non NumPy,

+1

Peut-être 'math.isnan' au lieu de' val! = Val'? –

+0

@JonClements: Oh, hein, c'est une chose. J'ai oublié que le module 'math' a en fait un' isnan'. – user2357112

+0

@piRSquared: Le NaN dans leur dict n'est pas le même objet que 'np.nan'. Python fait une vérification 'is' avant' == 'ici, ce qui vous déstabilise. – user2357112