2016-03-08 1 views
1

Collé sur ce qui suit.read_hdf où échoue 'toutes les variables de réfrences doivent être une référence à un axe ...'

log_iter = pd.read_hdf(FN, dspath, 
         where = [pd.Term('hashID','=',idList)], 
         iterator=True, 
         chunksize=3000) 

Le dspath a 35 colonnes et peut être assez volumineux, ce qui provoque l'erreur MemoryError.

Essayez donc d'utiliser la route iteator/chunksize. Mais le « où » = clause ne parvient pas à

ValueError: The passed where expression: [hashID=[147685,...,147197]] 
     contains an invalid variable reference 
     all of the variable refrences must be a reference to 
     an axis (e.g. 'index' or 'columns'), or a data_column 
     The currently defined references are: ** list of column names ** 

Le problème est que Hached est pas dans la liste des noms de colonnes. Cependant, si oui

read_hdf(FN, dspath).columns 

Le hashID se trouve dans les colonnes. Aucune suggestion? Mon but est de lire dans toutes les lignes x 35 colonnes dont hashID est dans idList.

Mise à jour. Les travaux suivants et montre que le Hached existe sous la forme d'une colonne, une fois l'ensemble de données est lue.

def dsIterator(self, q, idList): 
    hID = u'hashID' 
    FN = self.db._hdf_FN() 
    dspath = self.getdatasetname(q) 
    log_iter = pd.read_hdf(FN, dspath, 
          #where = [pd.Term(u'logid_hashID','=',idList)], 
          iterator=True, 
          chunksize=30000) 
    n_all = 0 
    retDF = None 
    for dfChunk in log_iter: 
     goodChunk = dfChunk.loc[dfChunk[hID].isin(idList)] 
     if retDF is None : retDF = goodChunk 
     else: 
      retDF = pd.concat([retDF, goodChunk], ignore_index=True) 
     n_all += dfChunk[hID].count() 
    n_ret = retDF[hID].count() 
    return retDF 
+0

Remarque, j'utilise python2. Ainsi, le 'hashID' doit utiliser u'hashID 'comme nom de colonne. – frankr6591

Répondre

0

Est-ce que

log_iter = pd.read_hdf(FN, dspath, 
       where = ['logid_hashID={:d}'.format(id_) for id_ in idList] 
       iterator=True, 
       chunksize=3000) 

travail?

Si le idList est grand, cela peut être une mauvaise idée.