【问题标题】:Pandas read_excel sometimes creates index even when index_col=None即使 index_col=None,Pandas read_excel 有时也会创建索引
【发布时间】:2019-06-26 12:31:20
【问题描述】:

我正在尝试将 excel 文件读入数据框中,并且我想稍后设置索引,所以我不希望 pandas 使用第 0 列作为索引值。

默认情况下 (index_col=None),它不应该使用第 0 列作为索引,但我发现如果工作表的单元格 A1 中有 no 值,它会。

有什么方法可以覆盖这种行为(我正在加载许多在单元格 A1 中没有价值的工作表)?

当 test1.xlsx 在单元格 A1 中具有值“DATE”时,这将按预期工作:

In [19]: pd.read_excel('test1.xlsx')                                             
Out[19]: 
                 DATE         A         B         C
0 2018-01-01 00:00:00  0.766895  1.142639  0.810603
1 2018-01-01 01:00:00  0.605812  0.890286  0.810603
2 2018-01-01 02:00:00  0.623123  1.053022  0.810603
3 2018-01-01 03:00:00  0.740577  1.505082  0.810603
4 2018-01-01 04:00:00  0.335573 -0.024649  0.810603

但是当工作表在单元格A1中没有值时,它会自动将第0列的值分配给索引:

In [20]: pd.read_excel('test2.xlsx', index_col=None)                             
Out[20]: 
                            A         B         C
2018-01-01 00:00:00  0.766895  1.142639  0.810603
2018-01-01 01:00:00  0.605812  0.890286  0.810603
2018-01-01 02:00:00  0.623123  1.053022  0.810603
2018-01-01 03:00:00  0.740577  1.505082  0.810603
2018-01-01 04:00:00  0.335573 -0.024649  0.810603

这不是我想要的。

所需结果:与第一个示例相同(但可能使用“未命名”作为列标签)。

Documentation

index_col : int,int 列表,默认无。

列(0-indexed)用作DataFrame的行标签。如果没有这样的列,则传递 None。

【问题讨论】:

  • 我无法重现此问题。将单元格 A1 留空时,我得到了想要的结果。这是使用熊猫 0.24.0。你用的是什么熊猫版本?

标签: python excel pandas dataframe indexing


【解决方案1】:

您描述的问题与已知的 pandas 错误相符。最近pandas 0.24.0 release修复了这个bug:

错误修复

【讨论】:

  • 我正在使用 Pandas 0.25.3 版,它正在发生在我身上。有什么想法吗?
  • @DataGirl 不。我在 pandas 0.25.3 中没有遇到这个问题。
  • 我使用的是熊猫版本 0.25.1。但问题似乎没有得到解决。无论如何,我正在获取索引列!
  • @ChintanGotecha 在这种情况下,您应该通过github.com/pandas-dev/pandas/issues 报告问题。
【解决方案2】:

你也可以使用

index_col=0

而不是

index_col = None

【讨论】:

  • 这不是正确的答案。使用index_col=0 将导致pd.read_excel 使用第一列作为索引,这是我试图避免的(参见问题的第一句)。
  • 抱歉没读好,我想你可以隐藏索引,当你想保存或转换成其他格式,比如 df.to_excel(filename, index=False),我没有找到 index_col =没有像我们预期的那样工作。
【解决方案3】:

自最近几天以来,我基本上面临着同样的问题。

我有一个 Excel 文件,它的第一列标题也为空白。因此,当它被读取时,它会被读取为索引。

我尝试了很多选项,但下面的代码使用 skiprows 而不是 header 选项。有趣的是,skirows 对没有标题的列使用“未命名:0”命名模式,而使用标题选项它不起作用。我们使用的是 pandas 0.20.1 版:

df = pd.read_excel( "ABC.xlsx"  , dtype=str, sheetname='Supply', skiprows =6, usecols = mycols )

 df.columns
Index([       'Unnamed: 0', 2015-01-01 00:00:00, 2015-02-01 00:00:00,
       2015-03-01 00:00:00, 2015-04-01 00:00:00, 2015-05-01 00:00:00,
       2015-06-01 00:00:00, 2015-07-01 00:00:00, 2015-08-01 00:00:00,
       2015-09-01 00:00:00,
       ...
       ],
      dtype='object', length=120)

文档没有提供更多关于此的信息。但上述解决方法可以节省您的时间。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-03-26
    • 2015-07-11
    • 2020-05-25
    • 1970-01-01
    • 2018-07-21
    • 1970-01-01
    • 1970-01-01
    • 2019-12-12
    相关资源
    最近更新 更多