2015-07-06 11 views
10

पढ़ने पर 'CParserError` को पकड़ने के लिए कैसे मैं डेटाफ्रेम में CSVs की एक सूची पढ़ना चाहता हूं। हालांकि, मुझे एक त्रुटि को पकड़ने में परेशानी हो रही है जो तब होती है जब फ़ाइल में शीर्षलेख पंक्तियां होती हैं जो डेटा से मेल नहीं खाती हैं (यानी मेटाडेटा या अतिरिक्त रिक्त पंक्तियां)। यह त्रुटि एक 'CParserError' है (नीचे मेरे त्रुटि संदेश देखें)।सीएसवी फ़ाइल

मेरे वर्तमान समाधान

try: 
    #read file 
except CParserError: 
    #give me an error message 

साथ, एक कोशिश को छोड़कर कथन का उपयोग करने के लिए हालांकि, यह नीचे त्रुटि के साथ विफल:

NameError: name 'CParserError' is not defined 

मेरे कोड के नीचे है। जैसा कि आप देख सकते हैं मुझे लगता है कि विभिन्न त्रुटियों को पकड़ने के लिए मुझे बयानों को छोड़कर कई की आवश्यकता है। पहले जांच करनी चाहिए कि डिफ़ॉल्ट एन्कोडिंग प्रकार काम करते हैं (फाइलें यूटीएफ -8 या लैटिन -1 के अलावा कभी भी कुछ नहीं होंगी)। यदि शीर्षलेख पंक्तियां हैं, तो pd.read_csv एक 'CParserError' संदेश देता है (नीचे देखें) जिसे मुझे पकड़ने की आवश्यकता है। फिर, यदि कोई अन्य विविध समस्याएं हैं तो मैं उन्हें भी पकड़ना चाहता हूं।

कोई समाधान स्वागत है, जो आदर्श रूप से समझाएगा कि क्यों CParserError सही नहीं है, या यदि इस पर निर्भरता से बचने के लिए प्रयास को छोड़कर तर्क को संशोधित किया जा सकता है।

धन्यवाद।

files_list = glob.glob('*.csv*')  #get all csvs 
files_dict = {}   
for file in files_list: 
    try: 
     files_dict[file] = pd.read_csv('DFA_me_week27.csv', encoding='utf-8').read() 
    except UnicodeDecodeError:  
     files_dict[file] = pd.read_csv('DFA_me_week27.csv', encoding='Latin-1').read() 
    except CParserError: 
     print(file, 'failed: check for header rows') 
    except: 
     print(file, 'failed: some other error occurred') 

जब एक CSV हेडर के साथ फ़ाइल पार्स करने का प्रयास त्रुटि संदेश:

CParserError        Traceback (most recent call last) 
<ipython-input-15-e454c053d675> in <module>() 
----> 1 pd.read_csv('DFA_me_week27.csv') 

C:\Users\john.lwli\AppData\Local\Continuum\Anaconda3\lib\site-packages\pandas\io\parsers.py in parser_f(filepath_or_buffer, sep, dialect, compression, doublequote, escapechar, quotechar, quoting, skipinitialspace, lineterminator, header, index_col, names, prefix, skiprows, skipfooter, skip_footer, na_values, na_fvalues, true_values, false_values, delimiter, converters, dtype, usecols, engine, delim_whitespace, as_recarray, na_filter, compact_ints, use_unsigned, low_memory, buffer_lines, warn_bad_lines, error_bad_lines, keep_default_na, thousands, comment, decimal, parse_dates, keep_date_col, dayfirst, date_parser, memory_map, float_precision, nrows, iterator, chunksize, verbose, encoding, squeeze, mangle_dupe_cols, tupleize_cols, infer_datetime_format, skip_blank_lines) 
    463      skip_blank_lines=skip_blank_lines) 
    464 
--> 465   return _read(filepath_or_buffer, kwds) 
    466 
    467  parser_f.__name__ = name 

C:\Users\john.lwli\AppData\Local\Continuum\Anaconda3\lib\site-packages\pandas\io\parsers.py in _read(filepath_or_buffer, kwds) 
    249   return parser 
    250 
--> 251  return parser.read() 
    252 
    253 _parser_defaults = { 

C:\Users\john.lwli\AppData\Local\Continuum\Anaconda3\lib\site-packages\pandas\io\parsers.py in read(self, nrows) 
    708     raise ValueError('skip_footer not supported for iteration') 
    709 
--> 710   ret = self._engine.read(nrows) 
    711 
    712   if self.options.get('as_recarray'): 

C:\Users\john.lwli\AppData\Local\Continuum\Anaconda3\lib\site-packages\pandas\io\parsers.py in read(self, nrows) 
    1157 
    1158   try: 
-> 1159    data = self._reader.read(nrows) 
    1160   except StopIteration: 
    1161    if nrows is None: 

pandas\parser.pyx in pandas.parser.TextReader.read (pandas\parser.c:7403)() 

pandas\parser.pyx in pandas.parser.TextReader._read_low_memory (pandas\parser.c:7643)() 

pandas\parser.pyx in pandas.parser.TextReader._read_rows (pandas\parser.c:8260)() 

pandas\parser.pyx in pandas.parser.TextReader._tokenize_rows (pandas\parser.c:8134)() 

pandas\parser.pyx in pandas.parser.raise_parser_error (pandas\parser.c:20720)() 

CParserError: Error tokenizing data. C error: Expected 2 fields in line 12, saw 12 
+0

क्यों न सिर्फ शीर्ष लेख को छोड़ गया, जब मैं from pandas.io.parser import CParserError का उपयोग है हालांकि,? –

+0

क्या आप समझा सकते हैं कि इसका क्या मतलब है? मुझे यकीन नहीं है कि यह एक आसान काम होगा, बशर्ते कि कभी-कभी शीर्षलेख अलग-अलग प्रारूपों में हों। जैसे कभी-कभी यह 12 लाइनें और 2 कॉलम हेडर पंक्तियों के लायक होंगे; दूसरी बार यह सिर्फ एक पंक्ति होगी। –

+1

* 12 लाइनों और 2 कॉलम हेडर पंक्तियों के लायक * से आपका क्या मतलब है? आप 'error_bad_lines = गलत 'भी कर सकते हैं लेकिन यह सभी खराब लाइनों को अनदेखा कर देगा –

उत्तर

6

मैं स्पष्ट राज्य के लिए नफरत है, लेकिन ...

from pandas.parser import CParserError 

FutureWarning: Pandas.parser मॉड्यूल को बहिष्कृत किया गया है और भविष्य के संस्करण में हटा दिया जाएगा। निम्न का उपयोग बजाय

import from the pandas.io.parser 
0

मैं from pandas.parser import CParserError का उपयोग और मैं FutureWarning: The pandas.parser module is deprecated and will be removed in a future version. Please import from the pandas.io.parser instead मिला तो from pandas.io.parser import CParserError की सिफारिश की है कृपया।

मैं अजगर 3.6, और मेरे पांडा संस्करण का उपयोग कर रहा हूँ 0.20.3


मैं ModuleNotFoundError: No module named 'pandas.io.parser'

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