我尝试使用映射dict加载csv,并强制pandas将字符串/对象列读取为category
类型,以便更有效地使用内存(读取大型csv文件)。
df = pd.read_csv(file,delimiter=',', quotechar='~', escapechar='\0',usecols=cols,dtype=dtypes))
dtypes
是一个字典,我已将大熊猫自然读取的所有字段更改为object
dtype到category
。
在尝试阅读时,我遇到错误:
TypeError Traceback(最近一次调用最后一次) pandas._libs.parsers.TextReader._convert_tokens()中的pandas / _libs / parsers.pyx
TypeError:根据规则'safe'
,无法将数组从dtype('O')转换为dtype('int64')
有没有办法强制pandas将这些字段转换为category
类型,或者缩小哪个字段导致问题?
堆栈跟踪的剩余部分:
在处理上述异常期间,发生了另一个异常:
ValueError Traceback(最近一次调用最后一次) in() 3 df = pd.read_csv(file,delimiter =',',quotechar ='〜',escapechar ='\ 0',usecols = cols,dtype = dtypes) 4其他: ----> 5 df = pd.read_csv(file,delimiter =',',quotechar ='〜',escapechar ='\ 0',usecols = cols,nrows = nrows,dtype = dtypes) 6 7 print('read complete',df.shape,datetime.now() - startTime)
parser_f中的〜/ anaconda3 / lib / python3.6 / site-packages / pandas / io / parsers.py(filepath_or_buffer,sep,delimiter,header,names,index_col,usecols,squeeze,prefix,mangle_dupe_cols,dtype,engine ,converter,true_values,false_values,skipinitialspace,skiprows,nrows,na_values,keep_default_na,na_filter,verbose,skip_blank_lines,parse_dates,infer_datetime_format,keep_date_col,date_parser,dayfirst,iterator,chunksize,compression,thousands,decimal,lineterminator,quotechar,quoting,escapechar ,comment,encoding,dialect,tupleize_cols,error_bad_lines,warn_bad_lines,skipfooter,skip_footer,doublequote,delim_whitespace,as_recarray,compact_ints,use_unsigned,low_memory,buffer_lines,memory_map,float_precision) 707 skip_blank_lines = skip_blank_lines) 708 - > 709 return _read(filepath_or_buffer,kwds) 710 711 parser_f。 name = name
_read中的〜/ anaconda3 / lib / python3.6 / site-packages / pandas / io / parsers.py(filepath_or_buffer,kwds) 453 454尝试: - > 455 data = parser.read(nrows) 最后456: 457 parser.close()
阅读中的〜/ anaconda3 / lib / python3.6 / site-packages / pandas / io / parsers.py(self,nrows) 1067引发ValueError('不支持迭代的skipfooter') 1068 - > 1069 ret = self._engine.read(nrows) 1070 1071 if self.options.get('as_recarray'):
阅读中的〜/ anaconda3 / lib / python3.6 / site-packages / pandas / io / parsers.py(self,nrows) 1837 def读(self,nrows = None): 1838尝试: - > 1839 data = self._reader.read(nrows) 1840除StopIteration外: 1841年如果是self._first_chunk:
pandas._libs.parsers.TextReader.read()中的pandas / _libs / parsers.pyx
pandas._libs.parsers.TextReader._read_low_memory()
中的pandas / _libs / parsers.pyxpandas / _libs / parsers.pyx in> pandas._libs.parsers.TextReader._read_rows()
pandas / _libs / parsers.pyx in> pandas._libs.parsers.TextReader._convert_column_data()
pandas / _libs / parsers.pyx in> pandas._libs.parsers.TextReader._convert_tokens()
ValueError:带有基数为10的int()的无效文字:'ManualSaved'