需要帮助理解read_excel中的index_col(pandas)

时间:2016-08-04 06:56:32

标签: python pandas

我有一个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'也不起作用。

1 个答案:

答案 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等。

EDIT2

当你加入index_colkeep_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_valueskeep_default_na=False如果index_col = None or False独立运作,则会为index_col的任何其他值抛出错误。所以一个好的编程习惯是在这种情况下使用na_values选项,尽管我同意在熊猫中应该有更好的错误处理方法。