首页 > 解决方案 > 重命名 pandas 列在索引错误中找不到

问题描述

我有一个名为vwhere columns are =的数据框['self','id','desc','name','arch','rel']。当我重命名如下时,它不会让我删除给出column not found in axis错误的列。

情况1:

for i in range(0,len(v.columns)):
   #I'm trying to add 'v_' prefix to all col names
   v.columns.values[i] = 'v_' + v.columns.values[i]

v.drop('v_self',1)

#leads to error
KeyError: "['v_self'] not found in axis"

但是,如果我按以下方式进行操作,则可以正常工作

案例2:

v.columns = ['v_self','v_id','v_desc','v_name','v_arch','v_rel']
v.drop('v_self',1)
# no error

在这两种情况下,如果我遵循它,它的列都会给出相同的结果

v.columns
#both cases gives 
Index(['v_self', 'v_id', 'v_description', 'v_name', 'v_archived',
   'v_released'],
  dtype='object')

我不明白为什么在 case1 中它会出错?请帮忙,谢谢。

标签: pythonpandasdataframe

解决方案


那是因为.values返回基础值。你不应该直接改变那些。但支持直接分配给.columns

尝试这样的事情:

import pandas

df = pandas.DataFrame(
    [
        {key: 0 for key in ["self", "id", "desc", "name", "arch", "rel"]}
        for _ in range(100)
    ]
)

# Add a v_ to every column
df.columns = [f"v_{column}" for column in df.columns]

# Drop one column
df = df.drop(columns=["v_self"])

推荐阅读