Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python csv的Int错误的文本无效_Python_Pandas_Csv - Fatal编程技术网

Python csv的Int错误的文本无效

Python csv的Int错误的文本无效,python,pandas,csv,Python,Pandas,Csv,在尝试了这里给出的解决方案并失败后,我现在提出我的问题: 我有一个从多个txt文件导入的csv,当前所有列中的数据类型都是str。 为了对数据进行排序,我需要将一列再次设置为int,但转换并没有如我所希望的那样有效。我在用熊猫。 我尝试了不同的方法。首先,使用转换器加载数据: df = pd.read_csv('501-1000.csv', sep='\t', header=None, index_col=False, names=cols, usecols=cols,converters={"

在尝试了这里给出的解决方案并失败后,我现在提出我的问题:

我有一个从多个txt文件导入的csv,当前所有列中的数据类型都是str。 为了对数据进行排序,我需要将一列再次设置为int,但转换并没有如我所希望的那样有效。我在用熊猫。 我尝试了不同的方法。首先,使用转换器加载数据:

df = pd.read_csv('501-1000.csv', sep='\t', header=None, index_col=False, names=cols, usecols=cols,converters={"PY":int})
并使用
df[“PY”].astype(int)
。在这两种情况下,我都得到了
ValueError:invalid literal for int(),以10为基数:“BA”
因为我读到这与无法转换为整数的值有关,所以我尝试了
df.dropna(subset=['PY'])
df[“PY”].fillna(0.0).astype(int)
结果没有改变

有没有办法解决这个问题?遗憾的是,手工检查行并不是一个真正的选项——在我的测试文件中,可能是这样,但要做到这一点需要大量的数据。 尝试转换器时的完整回溯如下所示:

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-4-d5ea8aa389dc> in <module>()
     16 # load data; note dtype not set to str since there appear to be numeric columns
     17 cols = ['TI', 'AB', 'PY', 'DI']
---> 18 df = pd.read_csv('501-1000.csv', sep='\t', header=None, index_col=False, names=cols, usecols=cols,converters={"PY":int})
     19 
     20 # cycle through filename_dict, slice and export to csv

~\Anaconda3\lib\site-packages\pandas\io\parsers.py in parser_f(filepath_or_buffer, sep, delimiter, header, names, index_col, usecols, squeeze, prefix, mangle_dupe_cols, dtype, engine, converters, 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)
    653                     skip_blank_lines=skip_blank_lines)
    654 
--> 655         return _read(filepath_or_buffer, kwds)
    656 
    657     parser_f.__name__ = name

~\Anaconda3\lib\site-packages\pandas\io\parsers.py in _read(filepath_or_buffer, kwds)
    409 
    410     try:
--> 411         data = parser.read(nrows)
    412     finally:
    413         parser.close()

~\Anaconda3\lib\site-packages\pandas\io\parsers.py in read(self, nrows)
   1003                 raise ValueError('skipfooter not supported for iteration')
   1004 
-> 1005         ret = self._engine.read(nrows)
   1006 
   1007         if self.options.get('as_recarray'):

~\Anaconda3\lib\site-packages\pandas\io\parsers.py in read(self, nrows)
   1746     def read(self, nrows=None):
   1747         try:
-> 1748             data = self._reader.read(nrows)
   1749         except StopIteration:
   1750             if self._first_chunk:

pandas/_libs/parsers.pyx in pandas._libs.parsers.TextReader.read (pandas\_libs\parsers.c:10862)()

pandas/_libs/parsers.pyx in pandas._libs.parsers.TextReader._read_low_memory (pandas\_libs\parsers.c:11138)()

pandas/_libs/parsers.pyx in pandas._libs.parsers.TextReader._read_rows (pandas\_libs\parsers.c:12175)()

pandas/_libs/parsers.pyx in pandas._libs.parsers.TextReader._convert_column_data (pandas\_libs\parsers.c:14103)()

pandas/_libs/parsers.pyx in pandas._libs.parsers._apply_converter (pandas\_libs\parsers.c:30638)()

ValueError: invalid literal for int() with base 10: 'BA'
---------------------------------------------------------------------------
ValueError回溯(最近一次调用上次)
在()
16#负载数据;注意:dtype未设置为str,因为似乎有数字列
17 cols=['TI','AB','PY','DI']
--->18 df=pd.read\u csv('501-1000.csv',sep='\t',header=None,index\u col=False,names=cols,usecols=cols,converters={“PY”:int})
19
20#循环文件名_dict、切片并导出到csv
解析器中的~\Anaconda3\lib\site packages\pandas\io\parsers.py(文件路径或缓冲区、sep、分隔符、标题、名称、索引列、usecols、squeeze、prefix、mangle\u dupe\u cols、数据类型、引擎、转换器、true\u值、false\u值、skipinitialspace、skiprows、nrows、na\u值、keep\u默认值、na\u筛选器、冗余、跳过空白行、解析日期、推断日期时间格式、keep\u日期列、日期解析器、dayfirst、迭代器、chunksize、压缩、千、十进制、行终止符、引号、引号、转义符、注释、编码、方言、元组、错误行、警告行、跳脚、跳脚、双引号、delim空格、as-recarray、compact-int、使用无符号、低内存、缓冲行、内存映射、浮点精度)
653跳过空白行=跳过空白行)
654
-->655返回读取(文件路径或缓冲区,kwds)
656
657语法分析器u f.u name uu=name
读取中的~\Anaconda3\lib\site packages\pandas\io\parsers.py(文件路径或缓冲区,kwds)
409
410尝试:
-->411 data=parser.read(nrows)
412最后:
413解析器.close()
读取中的~\Anaconda3\lib\site packages\pandas\io\parsers.py(self,nrows)
1003提升值错误('迭代不支持skipfooter')
1004
->1005 ret=自读数(nrows)
1006
1007如果self.options.get('as_recarray'):
读取中的~\Anaconda3\lib\site packages\pandas\io\parsers.py(self,nrows)
1746 def读取(自身,nrows=无):
1747尝试:
->1748数据=自身读取(nrows)
1749除停止迭代外:
1750如果自我第一块:
pandas/_libs/parsers.pyx在pandas中。_libs.parsers.TextReader.read(pandas\_libs\parsers.c:10862)()
pandas/_libs/parsers.pyx在pandas中。_libs.parsers.TextReader。_read_low_内存(pandas\_libs\parsers.c:11138)()
pandas/_libs/parsers.pyx在pandas中。_libs.parsers.TextReader。_read_行(pandas\_libs\parsers.c:12175)()
pandas/_libs/parsers.pyx在pandas中。_libs.parsers.TextReader。_convert_column_数据(pandas\_libs\parsers.c:14103)()
pandas/_libs/parsers.pyx在pandas中。_libs.parsers._apply_转换器(pandas\_libs\parsers.c:30638)()
ValueError:基数为10的int()的文本无效:“BA”

如果我错过了什么,请告诉我,我对编程都是新手,而且这个网站和英语也不是我的第一语言。

你很接近了,需要省略
转换器
,并使用参数
errors='concurve'
将非数字转换为
NaN
s:

df = pd.read_csv('501-1000.csv',
                 sep='\t',
                 header=None, 
                 index_col=False, 
                 names=cols, 
                 usecols=cols)

df["PY"] = pd.to_numeric(df["PY"], errors='coerce').fillna(0.0).astype(int)

谢谢,我想这在理论上是可行的。但出于某种原因,似乎每一行都会抛出一个错误,而且……所有填充了0.0的行都不是我想要的。但我想问题在于我的数据,所以还是:谢谢!检查数据,可能是跟踪空白。然后需要
df[“PY”]=pd.to_numeric(df[“PY”].str.strip(),errors='concurve').fillna(0.0)。遗憾的是,astype(int)
没有改变它。我想我会更仔细地看数据。导入时设置dtype=str是否有问题?如果我不这样做,我会得到一个“DtypeWarning:Columns(44)具有混合类型”的警告。不过…数据是机密的吗?不,没有任何机密。