2015-11-30 3 views
11

Итак, я попытался прочитать все файлы csv из папки, а затем объединить их для создания большого csv (структура всех файлов была такой же), сохранить его и прочитать еще раз. Все это было сделано с помощью Панды. Ошибка при чтении. Я присоединяю код и ошибку ниже.Ошибка при чтении csv-файла в pandas [CParserError: ошибка для токенизации данных. C ошибка: переполнение буфера - возможный неправильный входной файл.]

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=',') 

Ошибка: -

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. 

Я попытался с помощью чтения CSV, а также: -

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

Ошибка: -

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? 

ответ

9

не ответ, но слишком долго для комментария (не говоря о форматировании кода)

Как ломается, когда вы читаете это в модуле CSV, вы можете по крайней мере найти строку, в которой произошла ошибка:

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))) 

Тогда смотрите в store.csv, что происходит на этой линии.

+1

Извините за поздний ответ, взглянули на CSV были некоторые символы Юникода, как \ г , -> и т. д., что привело к неожиданным побегам. Замена их в источнике сделала трюк. Ваш ответ очень помог визуализировать их. –

+1

Для Python 3 просто откройте файл с 'r' i.e., 'open ('file.csv', 'r')', чтобы это работало – AlexG

4

Я нашел эту ошибку, причиной было то, что некоторые каретки вернули «\ r» в данных, которые pandas использовал в качестве ограничителя строк, как если бы это было «\ n». Я думал, что я отправлю сюда, поскольку это может быть обычной причиной появления этой ошибки.

Решение, которое я нашел, чтобы добавить КонцаСтроки = «\ п» в функции read_csv, как это:

df_clean = pd.read_csv('test_error.csv', 
       lineterminator='\n') 
Смежные вопросы