如何使用名称列表更改pandas数据框中的列名?

26
我一直在尝试使用名称列表更改Pandas数据框的列名。正在使用以下代码:

```

df.rename(columns = list_of_names, inplace=True)

然而,每次我都会遇到一个类型错误,并出现错误信息“列表对象不可调用”。 我想知道为什么会发生这种情况?我该如何解决这个问题? 谢谢你的帮助。


你能分享一下你传递的 list_of_names 吗? - JGC
你可能需要分享更多的代码来揭示 TypeError 的原因。我怀疑它与这行代码无关。堆栈跟踪也可能有所帮助。 - JGC
@JGC 我找到答案了。我使用了一个标量(列表)而不是字典来更改名称。显然它会改变系列的名称。 - koliyat9811
5个回答

55

您可以使用

df.columns = ['Leader', 'Time', 'Score']

当我使用 df.rename(column = list_of_name) 时,我遇到了一个错误,这个错误我在原始问题中提到过。为什么我的原始代码会生成一个错误? - koliyat9811
因为当您将列表(标量)传递给重命名函数时,它会更改Series.name属性。您需要传递一个字典到重命名函数来更改轴值(列值)。 - Prakash Palnati

12

如果您需要renamel是您需要更改的名称列表)

df.rename(columns=dict(zip(df.columns,l)))

谢谢您,您的答案给了我适当的见解。能否解释一下为什么文档(http://pandas.pydata.org/pandas-docs/version/0.20.3/generated/pandas.DataFrame.rename.html)说我可以在“column”中使用“类似于列表”和“类似于字典”的东西。这意味着我也可以使用列表,对吗?除了字典之外。 - koliyat9811
1
因为当你将列表(标量)传递给rename函数时,它会改变Series.name属性。你需要传递一个字典给rename函数以更改轴值(列值)。 - Prakash Palnati
@koliyat9811,你可以查看Prakash的评论。 - BENY
这是一个非常出色的方法!我喜欢它。 - bearcub

7

set_axis

要设置列名,请使用 set_axis,并在axis=1axis='columns'中使用:

df = df.set_axis(list_of_names, axis=1)

请注意,默认情况下axis=0设置索引名称。

为什么不直接修改df.columns

虽然被广泛使用,但接受的答案存在一些缺点,set_axis有一些优势:

  1. set_axis allows method chaining:

    df.some_method().set_axis(list_of_names, axis=1).another_method()
    

    vs:

    df = df.some_method()
    df.columns = list_of_names
    df.another_method()
    
  2. set_axis should theoretically provide better error checking than directly modifying an attribute, though I can't find a specific example at the moment.


1
@MustafaAydın 谢谢,你说得对。axis=1 会报错,但似乎 axis=0 仍然允许你将更长的列表设置为索引。 - tdy
1
我明白了,但是当我运行时,df.columns = ...df.index = ... 都会出现长度不匹配的错误。我猜这是版本差异造成的。顺便说一下,方法链在我看来非常有用。 - Mustafa Aydın

6
只需更新columns属性:
df.columns = list_of_names

1
如果你的列表是:column_list,那么 column_list 就是 ['a', 'b', 'c']
原始的 df.columns['X', 'Y', 'Z']
你只需要执行:df.columns = column_list

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