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!
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