2013-04-15 25 views
5

Tôi đang sử dụng thư viện NumPy bằng Python để nhập dữ liệu tập tin CSV vào một ndarray như sau:Làm thế nào để bảo toàn tên cột trong khi nhập dữ liệu bằng cách sử dụng numpy?

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

Kết quả cung cấp các tên cột sau:

print(data.dtype.names) 

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

Các tên cột gốc là:

ROW_LABEL, My-Data-Cột-1.0, My-Data-Cột-1,1

Dường như việc đặt các tên cột của tôi phải áp dụng định dạng tên biến kiểu C. Tuy nhiên, có rất nhiều trường hợp kịch bản lệnh Python của tôi yêu cầu quyền truy cập vào các cột theo tên cột, vì vậy tôi cần đảm bảo rằng các tên cột vẫn không đổi. Để thực hiện điều này hoặc nhu cầu cần thiết để bảo tồn các tên cột ban đầu hoặc người nào khác tôi cần phải chuyển đổi tên cột của tôi thành định dạng numpy đang sử dụng.

Có cách nào để bảo toàn tên cột ban đầu trong khi nhập không? Nếu không, có cách nào dễ dàng để chuyển đổi nhãn cột để sử dụng định dạng gọn gàng đang sử dụng, tốt nhất là sử dụng một số chức năng gọn gàng?

+0

Xem ở đây: http://stackoverflow.com/questions/14429992/can-i-rename-fields-in-a-numpy-record-array –

+0

@RichardHollis i này s không cùng một câu hỏi - Tôi có thể nhập tên cột, nhưng tôi muốn giữ nguyên định dạng của chúng. Có lẽ tôi nên sửa đổi tiêu đề câu hỏi. – holocronweaver

Trả lời

3

nếu bạn thiết lập names=True, sau đó dòng đầu tiên của tập tin dữ liệu của bạn được truyền thông qua chức năng này:

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

Đây là những tùy chọn mà bạn có thể cung cấp:

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

Có lẽ bạn có thể thử để cung cấp chuỗi deletechars của riêng bạn là một chuỗi rỗng. Nhưng bạn muốn được tốt hơn thay đổi và đi qua này:

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

Chỉ cần đưa ra các giai đoạn và dấu trừ từ bộ đó, và vượt qua nó như:

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

Dưới đây là các nguồn: https://github.com/numpy/numpy/blob/master/numpy/lib/_iotools.py#l245

+0

Tôi đánh giá cao việc liên kết trực tiếp mã nguồn có liên quan và thêm một giải pháp thay thế tốt hơn cho chuỗi trống cho các thư bị xóa. Hoạt động giống như bạn đã đề xuất. Cảm ơn! – holocronweaver

+0

Bạn được chào đón, vui vì nó hoạt động cho trường hợp của bạn. Bạn có thể biết điều này, nhưng đi sâu vào tương lai, mã của bạn sẽ mạnh mẽ hơn nếu bạn có thể cố gắng giữ cho tên cột của mình trở nên đơn giản hơn và tránh các ký tự thường bị cấm. – askewchan

Các vấn đề liên quan