2013-04-15 15 views
5

używam biblioteki numpy w Pythonie do importowania danych do plików CSV do ndarray następująco:Jak zachować nazwy kolumn podczas importowania danych za pomocą numpy?

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

Wynik udostępnia następujące nazwy kolumn:

print(data.dtype.names) 

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

Oryginalne nazwy kolumn są:

ROW_LABEL, My-Dane-kolumnowe 1,0 My-Dane-Kolumna-1,1

Wygląda na to, że numpy zmusza moje nazwy kolumn do przyjęcia formatowania nazw zmiennych w stylu C. Jednak istnieje wiele przypadków, w których skrypty w języku Python wymagają dostępu do kolumn zgodnie z nazwą kolumny, więc muszę się upewnić, że nazwy kolumn pozostają stałe. Aby to osiągnąć, numpy musi zachować oryginalne nazwy kolumn, albo muszę przekonwertować nazwy kolumn do formatu używanego przez numpy.

Czy istnieje sposób na zachowanie oryginalnych nazw kolumn podczas importu? Jeśli nie, czy istnieje łatwy sposób konwertowania etykiet kolumn, aby używać formatu używanego przez numpy, najlepiej przy użyciu funkcji numpy?

+0

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

+0

@RichardHollis To ja To nie jest to samo pytanie - mogę już importować nazwy kolumn, ale chcę zachować ich formatowanie. Być może powinienem zmodyfikować tytuł pytania. – holocronweaver

Odpowiedz

3

jeśli ustawisz names=True, to pierwsza linia pliku dane są przekazywane za pośrednictwem tej funkcji:

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

Są to te opcje, które można dostarczyć:

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 '_'. 

Być może spróbować dostarczyć własny ciąg znaków deletechars, który jest pustym ciągiem znaków. Ale byłbyś lepiej modyfikując i przekazując w ten sposób:

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

Wystarczy wyjąć okres i minus z tego zestawu, i przekazać ją jako:

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

Oto źródło: https://github.com/numpy/numpy/blob/master/numpy/lib/_iotools.py#l245

+0

Doceniam bezpośrednie powiązanie odpowiedniego kodu źródłowego i dodanie lepszej alternatywy do pustego ciągu znaków dla deletecharów. Działa tak, jak sugerujesz. Dzięki! – holocronweaver

+0

Nie ma za co, cieszę się, że działa w twoim przypadku. Prawdopodobnie wiesz o tym, ale idąc w przyszłość, twój kod będzie bardziej niezawodny, jeśli spróbujesz, aby twoje nazwy kolumn były prostsze i unikaj powszechnie zabronionych znaków. – askewchan

Powiązane problemy