2016-06-29 11 views
4

Ich richte einen Argparse-Parser ein, um einige Benutzereingaben über die Shell zu lesen. Die Eingabe wird verwendet, um Daten aus einem Pandas DataFrame zu extrahieren, die Strings und Zahlen enthalten. Ich möchte das Argument type= in Argarse .add_argument() automatisch auf den Datentyp der jeweiligen Spalte anpassen.Verwenden von numpy Datentypen in argparse

Meine Idee war es, die argparse Argumente wie dies einzurichten, wo Eingangsdaten ist der Datenrahmen:

for c in inputdata.columns: 
     inputname= c 
     inputtype= np.dtype(inputdata[c]) 
     parser.add_argument("--"+inputname, type=inputtype) 

Dies ist jedoch nicht funktioniert: Python ein ValueError: dtype('int64') is not callable wirft. Ich denke, das liegt daran, dass ich die Numpy-Dateitypen nicht richtig füttere; wenn ich z.B. setze eingabetyp auf float, alles geht nach Plan. Wenn ich manuell type=np.int64 eingeben, hat Argparse kein Problem damit.

  • Wie kann ich es bekommen Sie die Dateitypen in meinem Datenrahmen zu akzeptieren, nämlich int64 und Objekt in der Schleife oben gezeigt? Ich habe auch einige der Optionen here ausprobiert, z. dtype.type aber nichts hat funktioniert.

  • Oder ist das einfach nicht möglich? Der argparse docs Zustand nur, dass

Gemeinsame integrierte Typen und Funktionen können direkt als Wert des Typs Argument

verwendet werden, aber wie ich oben gesagt scheint gut mit numpy Datentyp wenn explizit angegeben.

Danke für Ihre Hilfe!

+1

In diesem Kontext ist 'callable' normalerweise eine Funktion, die eine Zeichenfolge (aus Ihrer Eingabe) übernimmt und sie in etwas anderes konvertiert. Und es kommt zu einem Fehler, wenn der Eingabe-String schlecht gebildet ist. 'np.int64 ('123')' funktioniert. 'np.dtype ('int64') ('123')' nicht. – hpaulj

Antwort

5

Verwenden

inputtype = np.dtype(inputdata[c]).type 

oder

inputtype = inputdata[c].dtype.type 

Das .type Attribut ist aufrufbar, und verwendet werden können, neue Instanzen dieser dtype zu erstellen.

+0

funktioniert wie ein Charme. Danke mein Herr. – patrick

Verwandte Themen