2011-08-15 4 views
1

Existe-t-il une manière élégante de gérer les valeurs None dans la conversion d'une liste de tuples en une recarray numérique en utilisant l'appel unique à np.rec.fromrecords? En supposant que je sais ce que je veux la valeur manquante soit (par exemple -1 pour les entiers), comment puis-je attraper et manipuler l'exemple ci-dessous artificiel:gestion Aucune valeurs dans la conversion en numpy recarray

import numpy as np 
a = [('Bob', 40, 3.14), ('Sue', 38, 6.28), ('Jim', None, 9.42)] 
dtype = [('NAME', 'S10'), ('AGE', np.int32), ('SCORE', np.float64)] 
try: 
    b = np.rec.fromrecords(a, dtype=dtype) 
except TypeError: 
    # Convert None to 0 for AGE field here instead of raising the error 
    raise TypeError('Caught a TypeError') 

Je devine que je dois faire sur une par champ afin d'éviter de manquer les True TypeErrors ailleurs dans le recarray. Est-il possible d'isoler (c'est-à-dire quels champs) dans le recarray je veux que cette conversion s'applique. Mon cas d'utilisation réel est la conversion des enregistrements pyodbc en recarrays numpy.

+1

Contre quelles sources de données (Oracle, SQL Server, etc.) les appels pyodbc sont-ils effectués et la requête peut-elle être modifiée? – Bryan

+1

Contre SQL Server. Je pense que je comprends ce que vous dites, c'est à dire. utilisez CAST pour convertir les NULL en -1 sur le DB. Ça a du sens. – grovduck

Répondre

1

Retour -1 pour les valeurs de la colonne NULL à l'aide de la requête de base de données, quelque chose comme ceci:

SELECT COALESCE(ColumnName, -1) FROM Schema.Table; 

Ceci renvoie -1 pour les valeurs ColumnName qui sont NULL, sinon la valeur réelle est renvoyée. Documentation pour COALESCE here si nécessaire. Cela vous permet de fournir une valeur de remplacement NULL uniquement pour les colonnes dont vous avez besoin et ne masque pas les exceptions TypeError qui vous intéressent.

+0

super, merci pour l'aide. Cela semble être une façon plus raisonnable de gérer cela pour mon cas d'utilisation. – grovduck

Questions connexes