मेरे पास एक साधारण ASCII डेटा फ़ाइल है जिसे मैं python में numpy सरणी के रूप में आयात करना चाहता हूं। डेटा फ़ाइल (a.dat) बस इस तरह दिखती है:

1.0000000e+00   2.0000000e+00

3.0000000e+00   4.0000000e+00

मेरे सामने समस्या यह है कि मैं फ़ाइल आयात करने के लिए pandas.read_table का उपयोग करता हूं

a=pd.read_table('a.dat',header=None)

और जब मैं a.values का उपयोग करके सरणी में कनवर्ट करता हूं

परिणाम है

array([['   1.0000000e+00   2.0000000e+00'],
       ['   3.0000000e+00   4.0000000e+00']], dtype=object)

समस्या यह है कि फ्लोट नंबरों की व्याख्या स्ट्रिंग्स के रूप में की जाती है। मेरी वास्तविक डेटा फ़ाइल इस साधारण मैट्रिक्स से बहुत बड़ी है और इस प्रकार स्ट्रिंग को फ्लोट में परिवर्तित करने की प्रक्रिया बहुत कुशल नहीं हो सकती है।

अजीब तरह से, मैं dtype=np.float भी निर्दिष्ट नहीं कर सकता जैसा कि यह कहता है:

TypeError: Cannot cast array from dtype('O') to dtype('float64') according to the rule 'safe'

तो क्या कोई सीधा तरीका है कि मैं इस तरह की मैट्रिक्स जैसी डेटा फ़ाइल को numpy फ्लोट सरणी में आयात कर सकता हूं?

किसी भी टिप्पणी और विचार की सराहना की जाती है। धन्यवाद!

0
Jake Pan 16 जिंदा 2019, 07:35

1 उत्तर

सबसे बढ़िया उत्तर

read_table के लिए डिफॉल्ट सेपरेटर TAB है, स्पेस नहीं। बस इसे अंतरिक्ष का उपयोग करने के लिए कहें:

pd.read_table('a.dat', header=None, sep='\s')
#     0    1
#0  1.0  2.0
#1  3.0  4.0
0
DYZ 16 जिंदा 2019, 07:38