पढ़ने पर '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
क्यों न सिर्फ शीर्ष लेख को छोड़ गया, जब मैं
from pandas.io.parser import CParserError
का उपयोग है हालांकि,? –क्या आप समझा सकते हैं कि इसका क्या मतलब है? मुझे यकीन नहीं है कि यह एक आसान काम होगा, बशर्ते कि कभी-कभी शीर्षलेख अलग-अलग प्रारूपों में हों। जैसे कभी-कभी यह 12 लाइनें और 2 कॉलम हेडर पंक्तियों के लायक होंगे; दूसरी बार यह सिर्फ एक पंक्ति होगी। –
* 12 लाइनों और 2 कॉलम हेडर पंक्तियों के लायक * से आपका क्या मतलब है? आप 'error_bad_lines = गलत 'भी कर सकते हैं लेकिन यह सभी खराब लाइनों को अनदेखा कर देगा –