Pandas - 删除列索引的标签

35
我有一个如下的数据框:

I have a dataframe as follows:

PLEASE_REMOVE  2013  2014  2015
 THIS_IS_EASY
-------------------------------
          Bob     0     3     4
         Mary     2     3     6
年份(2013、2014、2015)是列索引标签。姓名(Mary、Bob)是行索引标签。
我成功地为行索引和列索引获取了标签。
使用 df.index.names =[''] 可以删除 "THIS_IS_EASY" 部分。
如何删除 "PLEASE_REMOVE" 部分?
期望输出为:
               2013  2014  2015
 -------------------------------
          Bob     0     3     4
         Mary     2     3     6

你的数据源和示例代码是什么? - misterflister
5个回答

40

针对pandas 1.x的新答案,由Ian Logie提交

df.columns.name = None

2018年10月的旧回答

只需删除列名:

del df.columns.name

此外,请注意df.index.names = ['']del df.index.name并不完全相同。


5
好的,我会尽力进行翻译:这个方法行得通,我转而使用了 del df.index.name,现在我意识到它给了我一个更正确的解决方案。 - user9588528
这个在多重索引上能用吗?我收到了“AttributeError: name”的错误。 - user-2147482637
@user-2147482637,可以使用MultiIndex.rename()来实现。例如,如果df有2个索引级别,您可以使用以下代码将最外层级别(level=0)重命名为“new_level_name”:df.index = df.index.rename('new_level_name', level=0) - Peter Leimbigler
2
这似乎在Pandas 1.0.3中出现了问题,现在这是最佳答案 - rysqui
如果您在可视化数据框(例如在Jupyter笔记本中)时仍然看到“none”或“NAN”,那么可以尝试以下操作。我从这个解决方案中发现最好的方法是将df.columns.name=''添加到代码中。 - Elias
1
在1.2.4版本中,df.columns.name会抛出错误。正确的写法是df.columns.names,并且它不接受单个值,而是期望像df.columns.names = [None, None]这样的列表,如果你有多个标题。如果要删除索引标签,你需要单独使用temp_df.rename_axis(None, inplace=True)。 - shiv

18

1
不是所有的东西都会被移除。这只会因为默认设置而在原始帖子中的示例中消除“THIS IS EASY”。使用df = df.rename_axis(None, axis=1)df = df.rename_axis(None, axis="columns")来删除列的整体名称,即原始帖子中的“PLEASE REMOVE”。 - Alper

16
在Pandas 1.0.3中,以下内容有效:
df.columns.name = None

上面的“被接受的答案”,即del df.columns.name,会导致错误:“AttributeError: can't delete attribute”。请注意保留HTML标签。

2
在Pandas 1.0.3中,原来的回答不再适用。@Ian Logie你说得对。 - Eiffelbear
编辑了我的答案(该答案在2018年10月被接受)以反映正确的方法来删除列索引的名称。感谢@IanLogie! - Peter Leimbigler

4

在 Pandas 1.0.3 中,我使用了以下代码:

df.rename_axis(None, axis = 1)

2

columns.name无法使用,因为发布者想要删除索引名称。

df.index.name = None

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接