修改pandas数据框的列名不按预期工作 - python

27

我有一个名为df的pandas数据框。我试图重命名列名,但结果并不如预期。

代码:

 mapping = {df.columns[0]:'Date', df.columns[1]: 'A', df.columns[2]:'B', df.columns[3]: 'C',df.columns[4]:'D', df.columns[5]: 'E',df.columns[6]:'F', df.columns[7]: 'G',df.columns[8]:'H', df.columns[9]: 'J'}
 df.rename(columns=mapping) 

df.columns 的输出结果为:

MultiIndex(levels=[['A Index', 'B Index', 'C Index', 'D Index', 'E Index', 'F Index', 'G Index', 'H Index', 'I Index', 'J Index', 'K Index', 'L Index', 'M Index', 'N Index', 'O Index', 'date', 'index'], ['PX_LAST', '']],
       labels=[[16, 15, 11, 9, 10, 6, 3, 4, 2, 5, 14, 1, 13, 12, 7, 0, 8], [1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]],
       names=['ticker', 'field'])

即使运行了代码,列名仍然相同。有没有人可以帮忙重命名数据框的列名。

即使运行了代码,列名仍然相同。有没有人可以帮忙重命名数据框的列名。

3个回答

37

因为您已经知道列的顺序,所以为什么不直接使用:

df.columns = ['Date', 'a', 'b', 'c', 'd', 'e', 'f' 'g', 'h', 'i', 'j']

否则,如果你想使用rename,你将需要把它赋值给一个变量:
 mapping = {df.columns[0]:'Date', df.columns[1]: 'A', df.columns[2]:'B', df.columns[3]: 'C',df.columns[4]:'D', df.columns[5]: 'E',df.columns[6]:'F', df.columns[7]: 'G',df.columns[8]:'H', df.columns[9]: 'J'}
 df = df.rename(columns=mapping)

非常感谢!df.columns = ['日期', 'a', 'b', 'c', 'd', 'e', 'f' 'g', 'h', 'i', 'j'] 运行正常。 - Arvinth Kumar
13
df.rename(columns=mapping, inplace=True)也可以起作用。 - Christian O'Reilly
1
如果我使用 df = df.rename(columns=mapping),我会得到错误:TypeError: rename() got an unexpected keyword argument 'columns'。你可能有解决方法吗?谢谢。 - Baobab

8

Pandas版本小于1.4.3

根据Pandas以前的文档,axis参数的默认值为0(表示索引)。

因此,将您的命令更改为:

df.rename(columns = mapping, axis = 1)

当axis等于1时,表示列,将按预期工作。

另外,如前所述,您可以使用inplace=True,这样就不必重新分配已更新的DataFrame。

Pandas版本>=1.4.3(感谢@Gordon提供信息)

您只需使用:

df.rename(columns = mapping)

通过新的更新(请参见文档),Pandas 理解到当您将映射设置为 columns 参数时,您意味着要更改列的值(这是很自然的);因此,axis 参数是不必要的。

正如之前所提到的,您还可以使用 inplace=True ,这样您就不必重新分配已更新的 DataFrame。


1
pandas 1.4.3版本的修订限制了这一点。TypeError: 无法同时指定“axis”和“index”或“columns”中的任何一个。 - Gordon

5

rename 调用中添加 inplace=True 将会起作用。

尽管如此,如果我不指定 inplace=True,我不确定结果是什么,因为我没有看到任何变化。


1
我找到了这个网站:https://re-thought.com/guide-to-renaming-columns-with-python-pandas/,它提供了很好的解释。 - Wolfgang Sprick
1
请根据说明更新您的答案。 - desertnaut

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