重命名pandas的列名称时,没有按预期工作- python

7fhtutme  于 6个月前  发布在  Python
关注(0)|答案(3)|浏览(64)

我有下面的Pandas命名框df。我试图重命名列名,但它不工作,如预期。
代码:

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'])


即使在运行代码后,列名保持不变。有人能帮助重命名这个框架的列名吗?

3bygqnnd

3bygqnnd1#

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

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)

bxjv4tth

bxjv4tth2#

让我们假设你有一个Map,比如:

mapping = {"old_name_1" : "new_name_1", "old_name_2" : "new_name_2"}

字符串

Pandas版本< 1.4.3

根据pandas之前的文档,axis参数的默认值为0(表示索引)。
因此,将您的命令更改为:

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


,其中axis等于1表示列,将按预期工作。
此外,您可以使用inplace参数,这样就不必重新设置DataFrame。

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

Pandas版本>= 1.4.3

(感谢@Gordon的提醒)
您可以仅使用:用途:

df = df.rename(columns = mapping)


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


通过新的更新(参见documentation),pandas理解了当您设置mapping to columns参数时,您的意思是更改列的值(因为这是合乎逻辑的);因此,axis参数是不必要的。

4jb9z9bj

4jb9z9bj3#

inplace=True添加到rename调用将起作用。
但是,如果不指定inplace=True,我不确定结果是什么,因为我没有看到任何变化。

相关问题