2013-06-17 26 views
6

Tôi gặp sự cố nhỏ khi cố gắng nhập dữ liệu từ tệp CSV với hàm loadtxt của numpy. Đây là mẫu của loại tệp dữ liệu tôi có.numpy loadtxt bỏ qua hàng đầu tiên

Gọi nó datafile1.csv ':

# Comment 1 
# Comment 2 
x,y,z 
1,2,3 
4,5,6 
7,8,9 
... 
... 
# End of File Comment 

Các kịch bản mà tôi nghĩ sẽ làm việc cho tình hình này trông giống như:

import numpy as np 
FH = np.loadtxt('datafile1.csv',comments='#',delimiter=',',skiprows=1) 

Nhưng, tôi nhận được một lỗi:

ValueError: could not convert string to float: x 

Điều này cho tôi biết kwarg 'skiprows' không bỏ qua tiêu đề, nó bỏ qua hàng đầu tiên của nhận xét. Tôi có thể chỉ đơn giản là đảm bảo rằng skiprows = 3, nhưng biến chứng là tôi có một số lượng rất lớn các tập tin, mà không nhất thiết phải có cùng một số dòng bình luận ở đầu tập tin. Làm thế nào tôi có thể chắc chắn rằng khi tôi sử dụng loadtxt tôi chỉ nhận được dữ liệu thực tế trong một tình huống như thế này?

P.S. - Tôi cũng sẵn sàng giải pháp bash.

+0

Tôi cũng nên thêm rằng tôi đã cố gắng giải pháp khác nhau trong python để phân tích mỗi dòng cho một bình luận hoặc một nhân vật, nhưng nhanh chóng nhận ra không có gì của bản chất này có thể có thể làm việc vì loadtxt là không thành công ngay từ đầu. – astromax

Trả lời

12

Skip comment dòng biểu hiện bằng tay sử dụng máy phát điện:

import numpy as np 

with open('datafile1.csv') as f: 
    lines = (line for line in f if not line.startswith('#')) 
    FH = np.loadtxt(lines, delimiter=',', skiprows=1) 
-1

Tạo chức năng lọc tùy chỉnh của riêng bạn, chẳng hạn như:

def skipper(fname): 
    with open(fname) as fin: 
     no_comments = (line for line in fin if not line.lstrip().startswith('#')) 
     next(no_comments, None) # skip header 
     for row in no_comments: 
      yield row 

a = np.loadtxt(skipper('your_file'), delimiter=',')