我有一个excel文件,其中第一列是“ID”,项目的格式为IDXXX。
此代码
s = pd.read_excel('error4.xlsx', keep_default_na = False, index_col = 0)
出现错误
Traceback (most recent call last):
File "<pyshell#324>", line 1, in <module>
shit = pd.read_excel('error4.xlsx', keep_default_na = False, index_col = 0)
File "C:\Python27\lib\site-packages\pandas\io\excel.py", line 170, in read_excel
io = ExcelFile(io, engine=engine)
File "C:\Python27\lib\site-packages\pandas\io\excel.py", line 438, in _parse_excel
if not com.is_list_like(header):
File "C:\Python27\lib\site-packages\pandas\io\parsers.py", line 740, in read
if fallback_reason:
File "C:\Python27\lib\site-packages\pandas\io\parsers.py", line 1601, in read
self._make_reader(f)
File "C:\Python27\lib\site-packages\pandas\io\parsers.py", line 910, in _make_index
File "C:\Python27\lib\site-packages\pandas\io\parsers.py", line 1002, in _agg_index
% ','.join([str(x) for x in self.header])
TypeError: unsupported operand type(s) for |: 'list' and 'set'
我试过阅读文档,但我没有得到它。如果我删除index_col = 0
,它可以正常工作。 index_col = 'ID'
也不起作用。
答案 0 :(得分:0)
错误来自选项:
keep_default_na = False
根据文件:
na_values : str or list-like or dict, default None
Additional strings to recognize as NA/NaN. If dict passed, specific per-column NA values. By default the following values are interpreted as NaN: ‘’, ‘#N/A’, ‘#N/A N/A’, ‘#NA’, ‘-1.#IND’, ‘-1.#QNAN’, ‘-NaN’, ‘-nan’, ‘1.#IND’, ‘1.#QNAN’, ‘N/A’, ‘NA’, ‘NULL’, ‘NaN’, ‘nan’.
keep_default_na : bool, default True
If na_values are specified and keep_default_na is False the default NaN values are overridden, otherwise they’re appended to.
因此,如果您没有指定任何要转换为NaN的新值,为什么需要此选项
如果您有一个包含单个列的文件,请说我有一个带有单个列的文件output2.csv:
cmfa
-0.0019
-0.0018
-0.0033
如果您使用以下命令`
s = pd.read_csv('output2.csv',keep_default_na = False,index_col=0)
它会抛出错误TypeError: unsupported operand type(s) for |: 'list' and 'set'
因为在尝试使用keep_default_na语句时,数据集没有任何要操作的列并保留NaN值。它只有一个由您的专栏确定的索引。
但是,以下工作符合预期
s = pd.read_csv('output2.csv',index_col=0)
并给出一个输出(注意没有列)
print s
Empty DataFrame
Columns: []
Index: [-0.0019, -0.0018, -0.0033]
如果你想保留一个keep_default_na=False
语句,那么你必须取消index_col=0
选项,因为语句需要一些值来操作,并让数据帧的默认索引为0,1 ,2,3等。
当你加入index_col
和keep_default_na = False
语句时,似乎pandas不起作用,根据文档说,它也不指望在没有指定{keep_default_na = False
的情况下指定na_values
{1}}
所以在你的情况下使用以下内容:
s = pd.read_csv('output.csv',na_values=[],keep_default_na = False,index_col=0)
如果您未指定na_values
,keep_default_na=False
如果index_col = None or False
独立运作,则会为index_col
的任何其他值抛出错误。所以一个好的编程习惯是在这种情况下使用na_values
选项,尽管我同意在熊猫中应该有更好的错误处理方法。