2013-02-28 7 views
8

मैं CSV में सहेजे गए डेटा को संसाधित करने का प्रयास कर रहा हूं जिसमें अज्ञात संख्या में कॉलम (लगभग 30 तक) में अनुपलब्ध मान हो सकते हैं। मैं उन लापता मानों को genfromtxt के filling_missing तर्क का उपयोग करके '0' पर सेट करने का प्रयास कर रहा हूं।NumPy genfromtxt: filling_missing सही ढंग से उपयोग करके

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 

उपयोगकर्ता पुस्तिका NumPy मैं filling_values=0 उम्मीद करेंगे से और: यहाँ numpy 1.6.2

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 

और परिणाम विन 7 पर 2.7 32 बिट ActiveState ActivePython में चलाने के लिए एक न्यूनतम काम कर उदाहरण है काम करने के लिए filling_values={None:0} लेकिन इसके बजाय वे क्रमशः एक त्रुटि नहीं फेंकते हैं। जब आप सही कॉलम निर्दिष्ट करते हैं (filling_values={1:0}) यह काम करेगा, लेकिन चूंकि मेरे पास उपयोगकर्ता द्वारा चयन से पहले अज्ञात संख्या के कॉलम की बड़ी मात्रा है, इसलिए मैं भरे हुए मानों को स्वचालित रूप से उपयोगकर्ता मार्गदर्शिका संकेतों को सेट करने का तरीका ढूंढ रहा हूं।

मुझे लगता है कि मैं शायद पहले से ही कॉलम गिन सकता हूं और इस बीच में भरने के मूल्य के रूप में पास करने के लिए एक नियम बना सकता हूं, लेकिन क्या कोई बेहतर तरीका है?

+0

एक बग रिपोर्ट भी बना हुआ है: http://projects.scipy.org/numpy/ticket/1722 – Holger

+0

धन्यवाद, मैं GitHub बग ट्रैकर पर इस मुद्दे पर कोई टिप्पणी जोड़ी। https://github.com/numpy/numpy/issues/2317 – Thav

+1

बग अब numpy के विकास संस्करण में तय किया गया है: https://github.com/numpy/numpy/pull/4968 –

उत्तर

8

यह प्रलेखन से स्पष्ट नहीं है, लेकिन filling_values="0" काम करता है।

In [19]: !cat test.txt 
a,b,c,d 
1,2,3,4 
5,,7,8 
9,10,,12 

In [20]: a = numpy.genfromtxt('test.txt', delimiter=',', names=True, filling_values="0") 

In [21]: print a 
[(1.0, 2.0, 3.0, 4.0) (5.0, 0.0, 7.0, 8.0) (9.0, 10.0, 0.0, 12.0)] 
+0

यह मेरे लिए काम करता है! मैंने missing_values ​​तर्क के बारे में एक और SO सवाल देखा था, और कहा गया था कि उद्धरण वहां मदद नहीं करते थे, इसलिए मैंने इसे आजमाने की कोशिश नहीं की। – Thav

संबंधित मुद्दे