2015-10-29 37 views
5

Tôi có tệp csv, có thể có usecols lấy tất cả các cột ngoại trừ cột cuối cùng khi sử dụng read_csv mà không liệt kê mọi cột cần thiết. Ví dụ: nếu tôi có tệp cột 13, tôi có thể làm usecols=[0,1,...,10,11]. Làm usecols=[:-1] sẽ cho tôi lỗi cú pháp?Pandas usecols tất cả trừ cuối cùng

Có cách nào khác không? Tôi đang sử dụng pandas 0.17

+0

Tại sao không chỉ đọc trong một dòng, lấy danh sách các cột và sau đó thả mục nhập cuối cùng? – EdChum

Trả lời

4

Bạn chỉ có thể đọc một dòng duy nhất sử dụng nrows=1 để có được những cols và sau đó đọc lại đầy đủ các csv bỏ qua col cuối cùng bằng cách cắt các mảng cột từ đọc đầu tiên:

cols = pd.read_csv(file, nrows=1).columns 
df = pd.read_csv(file, usecols=cols[:-1]) 
+0

Đó có phải là lựa chọn duy nhất không? Có vẻ như tôi sẽ phải thêm một dòng cho mỗi tệp. Hầu hết có các cột khác nhau vì vậy tôi không thể sử dụng cùng biến 'cols'. – Leb

+0

Không phải là tôi có thể nghĩ, bạn luôn cần phải phân tích cú pháp csv ban đầu và từ phân tích cú pháp đó, bạn có thể tự động xác định cols để sử dụng, đây không phải là thứ được xây dựng trong – EdChum

+0

Cảm ơn, một câu hỏi cuối cùng. Tại sao nó đưa ra lỗi cú pháp khi thực hiện 'usecols = [: - 1]'. Nó đến từ trăn hay gấu trúc? – Leb

1

Bắt đầu từ phiên bản 0.20 phương thức usecols trong gấu trúc chấp nhận bộ lọc có thể gọi, tức là biểu thức lambda. Do đó nếu bạn biết tên của cột bạn muốn bỏ qua, bạn có thể làm như sau:

columns_to_skip = ['foo','bar'] 
df = pd.read_csv(file, usecols=lambda x: x not in columns_to_skip) 

Đây là tài liệu reference.

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