2015-02-07 13 views
8

मुझे पांडा मॉड्यूल पर CSV (या txt फ़ाइल) पढ़ने में कोई समस्या है क्योंकि numpy के loadtxt फ़ंक्शन में बहुत अधिक समय लगता है, इसलिए मैंने इसके बजाय pandas read_csv का उपयोग करने का निर्णय लिया।पायथन पांडस सीएसवी फ़ाइल की पहली पंक्ति नहीं पढ़ता

मैं अंतरिक्ष से अलग चार कॉलम के साथ txt फ़ाइल से एक numpy सरणी बनाना चाहता हूं, और इसमें बड़ी संख्या में पंक्तियां हैं (जैसे, 256^3। इस उदाहरण में, यह 64^3 है)।

समस्या यह है कि मुझे नहीं पता कि क्यों, लेकिन ऐसा लगता है कि पांडा के read_csv हमेशा csv (txt) फ़ाइल की पहली पंक्ति (पहली पंक्ति) को छोड़ देता है, जिसके परिणामस्वरूप एक कम डेटा होता है।

यहां कोड है।

from __future__ import division 
import numpy as np 
import pandas as pd 
ngridx = 4 
ngridy = 4 
ngridz = 4 
size = ngridx*ngridy*ngridz 
f = np.zeros((size,4)) 
a = np.arange(size) 
f[:, 0] = np.floor_divide(a, ngridy*ngridz) 
f[:, 1] = np.fmod(np.floor_divide(a, ngridz), ngridy) 
f[:, 2] = np.fmod(a, ngridz) 
f[:, 3] = np.random.rand(size) 
print f[0] 
np.savetxt('Testarray.txt',f,fmt='%6.16f') 
g = pd.read_csv('Testarray.txt',delimiter=' ').values 
print g[0] 
print len(g[:,3]) 

च [0] और जी [0] के रूप में एक निर्गम ज्यादा करना पड़ता है प्रदर्शित किया जाता है कि लेकिन यह नहीं करता है, यह दर्शाता है कि पांडा Testarray.txt की पहली पंक्ति लंघन है। इसके अलावा, लोड की गई फ़ाइल की लंबाई g सरणी f की लंबाई से कम है।

मुझे सहायता चाहिए।

अग्रिम धन्यवाद।

+0

आप numpy में क्यों सहेज रहे हैं और फिर पांडा में पढ़ रहे हैं? यह धीमा हो सकता है, इसके बजाय सरणी को अंडा में पांडा डेटाफ्रेम में परिवर्तित करें, फिर सीएसवी को लिखें। यह बहुत तेज है। – pbu

+0

ओह, यह सिर्फ एक उदाहरण है। मैं इसे पढ़ने में दिलचस्पी नहीं रखता यह इसे बचा नहीं है। धन्यवाद! – Tom

उत्तर

18

डिफ़ॉल्ट रूप से, pd.read_csvheader=0 का उपयोग करता है (जब names पैरामीटर भी निर्दिष्ट नहीं है) का अर्थ है जो पहली बार (अर्थात 0 अनुक्रमित) लाइन स्तंभ नाम के रूप में व्याख्या की है।

:

अपने डेटा कोई शीर्ष लेख है, तो का उपयोग

pd.read_csv(..., header=None) 

उदाहरण के लिए,

import io 
import pandas as pd 

text = '''\ 
1 2 3 
4 5 6 
''' 

print(pd.read_csv(io.BytesIO(text), sep=' ')) 

header के बिना, पहली पंक्ति, 1 2 3, स्तंभ नाम सेट

1 2 3 
0 4 5 6 

header=None के साथ, पहली पंक्ति डेटा के रूप में व्यवहार किया जाता है: तो में हेडर = कोई नहीं का उपयोग करके

print(pd.read_csv(io.BytesIO(text), sep=' ', header=None)) 

प्रिंट

0 1 2 
0 1 2 3 
1 4 5 6 
+0

ओह! हाँ! इसने काम कर दिया! यह भ्रमित था, कि read_csv पर पांडा दस्तावेज ने कहा कि हेडर डिफ़ॉल्ट रूप से कोई नहीं है इसलिए मैं बहुत उलझन में था। आखिरकार यह हेडर था। मदद के लिए बहुत बहुत धन्यवाद! – Tom

1

आपकी फ़ाइल एक शीर्ष लेख पंक्ति आप पांडा बताने की आवश्यकता नहीं है, तो अपने pd.read_csv() पर कॉल करें।

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