2015-11-30 9 views
11

Così ho provato a leggere tutti i file csv da una cartella e quindi concatenarli per creare un grande csv (la struttura di tutti i file era uguale), salvarla e leggerla ancora. Tutto questo è stato fatto usando Panda. L'errore si verifica durante la lettura. Sto allegando il codice e l'errore di seguito.Errore nella lettura di un file csv in panda [CParserError: errore durante la tokenizzazione dei dati. Errore C: buffer overflow rilevato - file di input malformato possibile.

import pandas as pd 
import numpy as np 
import glob 

path =r'somePath' # use your path 
allFiles = glob.glob(path + "/*.csv") 
frame = pd.DataFrame() 
list_ = [] 
for file_ in allFiles: 
    df = pd.read_csv(file_,index_col=None, header=0) 
    list_.append(df) 
store = pd.concat(list_) 
store.to_csv("C:\work\DATA\Raw_data\\store.csv", sep=',', index= False) 
store1 = pd.read_csv("C:\work\DATA\Raw_data\\store.csv", sep=',') 

Errore: -

CParserError        Traceback (most recent call last) 
<ipython-input-48-2983d97ccca6> in <module>() 
----> 1 store1 = pd.read_csv("C:\work\DATA\Raw_data\\store.csv", sep=',') 

C:\Users\armsharm\AppData\Local\Continuum\Anaconda\lib\site-packages\pandas\io\parsers.pyc 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) 
    472      skip_blank_lines=skip_blank_lines) 
    473 
--> 474   return _read(filepath_or_buffer, kwds) 
    475 
    476  parser_f.__name__ = name 

C:\Users\armsharm\AppData\Local\Continuum\Anaconda\lib\site-packages\pandas\io\parsers.pyc in _read(filepath_or_buffer, kwds) 
    258   return parser 
    259 
--> 260  return parser.read() 
    261 
    262 _parser_defaults = { 

C:\Users\armsharm\AppData\Local\Continuum\Anaconda\lib\site-packages\pandas\io\parsers.pyc in read(self, nrows) 
    719     raise ValueError('skip_footer not supported for iteration') 
    720 
--> 721   ret = self._engine.read(nrows) 
    722 
    723   if self.options.get('as_recarray'): 

C:\Users\armsharm\AppData\Local\Continuum\Anaconda\lib\site-packages\pandas\io\parsers.pyc in read(self, nrows) 
    1168 
    1169   try: 
-> 1170    data = self._reader.read(nrows) 
    1171   except StopIteration: 
    1172    if nrows is None: 

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

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

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

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

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

CParserError: Error tokenizing data. C error: Buffer overflow caught - possible malformed input file. 

Ho provato ad utilizzare il lettore csv così: -

import csv 
with open("C:\work\DATA\Raw_data\\store.csv", 'rb') as f: 
    reader = csv.reader(f) 
    l = list(reader) 

Errore: -

Error          Traceback (most recent call last) 
<ipython-input-36-9249469f31a6> in <module>() 
     1 with open('C:\work\DATA\Raw_data\\store.csv', 'rb') as f: 
     2  reader = csv.reader(f) 
----> 3  l = list(reader) 

Error: new-line character seen in unquoted field - do you need to open the file in universal-newline mode? 

risposta

9

Non è una risposta, ma troppo lungo per un commento (non parlando della formattazione del codice)

Come si rompe quando lo si legge nel modulo csv, si può almeno individuare la riga in cui si verifica l'errore:

import csv 
with open(r"C:\work\DATA\Raw_data\store.csv", 'rb') as f: 
    reader = csv.reader(f) 
    linenumber = 1 
    try: 
     for row in reader: 
      linenumber += 1 
    except Exception as e: 
     print (("Error line %d: %s %s" % (linenumber, str(type(e)), e.message))) 

quindi cercare nella store.csv ciò che accade in quella linea.

+1

Ci scusiamo per il ritardo di risposta, aveva uno sguardo al CSV ci sono stati alcuni caratteri Unicode come \ r , -> ecc. che ha portato a fughe impreviste. Sostituirli nella fonte ha fatto il trucco. La tua risposta ha aiutato molto a visualizzarli. –

+1

Per Python 3, apri il file con 'r' i.e., 'open (' file.csv ',' r ') 'perché funzioni – AlexG

4

Ho trovato questo errore, la causa era che c'erano alcuni ritorni a capo "\ r" nei dati che i panda utilizzavano come un terminatore di riga come se fosse "\ n". Ho pensato di pubblicare qui perché potrebbe essere un motivo comune per cui potrebbe verificarsi questo errore.

La soluzione che ho trovato è stato quello di aggiungere lineterminator = '\ n' nella funzione read_csv in questo modo:

df_clean = pd.read_csv('test_error.csv', 
       lineterminator='\n') 
Problemi correlati