【问题标题】:Pandas: setting column as index with set_index() creates a sub-index. Why is it happening and how to remove it?Pandas:使用 set_index() 将列设置为索引会创建一个子索引。为什么会发生以及如何删除它?
【发布时间】:2019-01-22 18:36:16
【问题描述】:

我想使用 pandas 数据框中的第一列作为行索引,所以我尝试使用 pandas.set_index(0, inplace=True) 来实现,但这有添加额外列索引的副作用。

(使用选项 InteractiveShell.ast_node_interactivity = "all" 运行的 jupyter 笔记本代码):

import pandas as pd

df = pd.DataFrame([[l+r*10 for l in range(1, 5)] for r in range(1, 5)])

df # before

df.set_index(0, inplace=True)

df # after

set_index()之前的数据框

set_index()之后的数据框

问题是为什么要创建第二个索引以及如何删除它? set_index() docs 没有提及任何关于正在创建的子索引。

【问题讨论】:

  • 我认为你看到的是红色圆圈内的零是索引名称。 Pandas 显示从列标题偏移的索引名称,因此您在列标题下方有该空间。当使用列名称的 set index 参数时,该列名称会随着该列移动到数据框的索引中而更改为新的索引名称。

标签: python pandas dataframe indexing


【解决方案1】:

就像@scott-boston 评论的那样,显示了索引名称,即您的示例中的列名“0”。如果你想删除它,你可以简单地使用:

del df.index.name

所以你的完整代码是:

import pandas as pd

df = pd.DataFrame([[l+r*10 for l in range(1, 5)] for r in range(1, 5)])

df # before

df.set_index(0, inplace=True)
del df.index.name

df # after

【讨论】:

  • 最新版本的 pandas 不再支持 del df.index.name 方法,它会引发“AttributeError”。 df.index.name = None 也可以。
猜你喜欢
  • 1970-01-01
  • 2011-05-19
  • 1970-01-01
  • 2012-01-16
  • 2020-07-22
  • 2017-06-16
  • 2021-12-02
  • 2013-09-08
相关资源
最近更新 更多