2013-04-15 5 views
5

ich die numpy Bibliothek in Python bin mit CSV-Datei Daten in eine ndarray importieren wie folgt:Wie erhalten Sie die Spaltennamen beim Importieren von Daten mit numpy?

data = np.genfromtxt('mydata.csv', 
        delimiter='\,', dtype=None, names=True) 

Das Ergebnis stellt die folgenden Spaltennamen:

print(data.dtype.names) 

('row_label', 
'MyDataColumn1_0', 
'MyDataColumn1_1') 

Die ursprünglichen Spaltennamen sind:

ROW_LABEL, My-Data-Column-1.0, My-Data-Column-1,1

Es scheint, dass numpy meine Spaltennamen dazu zwingt, C-style Variablennamen zu formatieren. Es gibt jedoch viele Fälle, in denen meine Python-Skripte Zugriff auf Spalten gemäß dem Spaltennamen benötigen, so dass ich sicherstellen muss, dass die Spaltennamen konstant bleiben. Um dies zu erreichen, muss entweder numpy die ursprünglichen Spaltennamen beibehalten oder ich muss meine Spaltennamen in das Format konvertieren, das numpy verwendet.

Gibt es eine Möglichkeit, die ursprünglichen Spaltennamen während des Imports beizubehalten? Wenn nicht, gibt es eine einfache Möglichkeit, Spaltenbeschriftungen zu konvertieren, um das Format zu verwenden, das numpy verwendet, vorzugsweise unter Verwendung einer numpy-Funktion?

+0

Siehe hier: http://stackoverflow.com/questions/14429992/can-i-rename-fields-in-a-numpy-record-array –

+0

@RichardHollis Das i s nicht die gleiche Frage - ich kann bereits Spaltennamen importieren, aber ich möchte ihre Formatierung beibehalten. Vielleicht sollte ich den Fragetitel ändern. – holocronweaver

Antwort

3

wenn Sie names=True gesetzt, dann ist die erste Zeile der Datendatei durch diese Funktion übergeben wird:

validate_names = NameValidator(excludelist=excludelist, 
           deletechars=deletechars, 
           case_sensitive=case_sensitive, 
           replace_space=replace_space) 

Dies sind die Optionen, die Sie liefern können:

excludelist : sequence, optional 
    A list of names to exclude. This list is appended to the default list 
    ['return','file','print']. Excluded names are appended an underscore: 
    for example, `file` would become `file_`. 
deletechars : str, optional 
    A string combining invalid characters that must be deleted from the 
    names. 
defaultfmt : str, optional 
    A format used to define default field names, such as "f%i" or "f_%02i". 
autostrip : bool, optional 
    Whether to automatically strip white spaces from the variables. 
replace_space : char, optional 
    Character(s) used in replacement of white spaces in the variables 
    names. By default, use a '_'. 

Vielleicht könnten Sie versuchen, um Ihre eigene deletechars Zeichenkette zu liefern, die eine leere Zeichenkette ist. Aber Sie wären besser dran, Modifizieren und Leiten dieses:

defaultdeletechars = set("""[email protected]#$%^&*()-=+~\|]}[{';: /?.>,<""") 

einfach die Zeit nehmen und Minuszeichen aus diesem Satz, und übergeben Sie es als:

np.genfromtxt(..., names=True, deletechars="""[email protected]#$%^&*()=+~\|]}[{';: /?>,<""") 

Hier ist die Quelle: https://github.com/numpy/numpy/blob/master/numpy/lib/_iotools.py#l245

+0

Ich schätze es, den relevanten Quellcode direkt zu verknüpfen und eine bessere Alternative zu einem leeren String für deletechars hinzuzufügen. Funktioniert genau so, wie Sie es vorgeschlagen haben. Vielen Dank! – holocronweaver

+0

Gern geschehen, froh, dass es für Ihren Fall funktioniert. Sie wissen das wahrscheinlich, aber wenn Sie in die Zukunft gehen, wird Ihr Code robuster, wenn Sie versuchen können, Ihre Spaltennamen einfacher zu halten und die allgemein verbotenen Zeichen zu vermeiden. – askewchan

Verwandte Themen