Tôi đang cố gắng xử lý dữ liệu được lưu vào CSV có thể có giá trị thiếu trong một số cột không xác định (tối đa khoảng 30). Tôi đang cố gắng đặt các giá trị bị thiếu đó thành '0' bằng cách sử dụng đối số filling_missing
của genfromtxt
. Dưới đây là một ví dụ làm việc tối thiểu cho numpy 1.6.2 chạy trong ActiveState ActivePython 2.7 32 bit trên Win 7.NumPy genfromtxt: sử dụng fill_missing đúng
import numpy
text = "a,b,c,d\n1,2,3,4\n5,,7,8"
a = numpy.genfromtxt('test.txt',delimiter=',',names=True)
b = open('test.txt','w')
b.write(text)
b.close()
a = numpy.genfromtxt('test.txt',delimiter=',',names=True)
print "plain",a
a = numpy.genfromtxt('test.txt',delimiter=',',names=True,filling_values=0)
print "filling_values=0",a
a = numpy.genfromtxt('test.txt',delimiter=',',names=True,filling_values={1:0})
print "filling_values={1:0}",a
a = numpy.genfromtxt('test.txt',delimiter=',',names=True,filling_values={0:0})
print "filling_values={0:0}",a
a = numpy.genfromtxt('test.txt',delimiter=',',names=True,filling_values={None:0})
print "filling_values={None:0}",a
Và kết quả:
plain [(1.0, 2.0, 3.0, 4.0) (5.0, nan, 7.0, 8.0)]
filling_values=0 [(1.0, 2.0, 3.0, 4.0) (5.0, nan, 7.0, 8.0)]
filling_values={1:0} [(1.0, 2.0, 3.0, 4.0) (5.0, 0.0, 7.0, 8.0)]
filling_values={0:0} [(1.0, 2.0, 3.0, 4.0) (5.0, nan, 7.0, 8.0)]
Traceback (most recent call last):
File "C:\Users\tolivo.EE\Documents\active\eng\python\sizer\testGenfromtxt.py", line 20, in <module>
a = numpy.genfromtxt('test.txt',delimiter=',',names=True,filling_values={None:0})
File "C:\Users\tolivo.EE\AppData\Roaming\Python\Python27\site-packages\numpy\lib\npyio.py", line 1451, in genfromtxt
filling_values[key] = val
TypeError: list indices must be integers, not NoneType
Từ hướng dẫn sử dụng NumPy Tôi mong chờ filling_values=0
và filling_values={None:0}
để làm việc nhưng thay vào đó họ không làm, và ném một lỗi tương ứng. Khi bạn chỉ định đúng cột (filling_values={1:0}
) nó sẽ hoạt động, nhưng vì tôi có một số lượng lớn các cột chưa biết trước khi lựa chọn bởi người dùng, tôi đang tìm cách tự động đặt các giá trị được điền như hướng dẫn sử dụng.
Tôi tưởng tượng tôi có thể đếm trước các cột và tạo ra giá trị để chuyển thành giá trị để điền_values trong thời gian chờ đợi, nhưng có cách nào tốt hơn không?
Có tồn tại một báo cáo lỗi: http://projects.scipy.org/numpy/ticket/1722 – Holger
Cảm ơn, tôi thêm một nhận xét về vấn đề này trên tracker github lỗi. https://github.com/numpy/numpy/issues/2317 – Thav
Lỗi này hiện đã được khắc phục trong phiên bản phát triển phần mềm: https://github.com/numpy/numpy/pull/4968 –