繁体   English   中英

重命名python pandas数据框的前n列名称后出现KeyError

[英]KeyError after renaming the first n column names of python pandas dataframe

如图所示,我们有一个简单的输入文件。 我们将 csv 输入加载到 pandas 数据帧中,并且我们想要重命名前 n 列,在本例中为前三列。

在此处输入图像描述

编码

import pandas as pd
file_path = r"C:\Codes\test\test_data.csv"
df1 = pd.read_csv(file_path)
print (df1, "\n", type(df1), "\n", df1.columns, "\n", type(df1.columns), "\n", df1.columns.values, "\n", type(df1.columns.values))

df2 = df1.copy()
print (df2, "\n", type(df2), "\n", df2.columns, "\n", type(df2.columns), "\n", df2.columns.values, "\n", type(df2.columns.values))

df2.columns.values[0:3] = ["symbol","field","abc"]  
print("\n after renaming the columns: ", df2)
print(df2["symbol"])

结果如下:

在此处输入图像描述

似乎代码df2.columns.values[0:3] = ["symbol","field","abc"]不稳定。 有时它可以工作,有时它不工作,例如,它可能会在尝试显示df2时报告“KeyError”或代码冻结。 我明白为什么它不起作用。 我正在使用 Python 3.10.4 在 Windows 10 上工作

当然我也可以写下面的代码,有效

df2.rename(columns={df2.columns[0]:  "symbol"},inplace=True)
df2.rename(columns={df2.columns[1]:  "field"},inplace=True)
df2.rename(columns={df2.columns[2]:  "abc"},inplace=True)

但我的目标是用简单的代码更改前 n 列。

您可以尝试像这样更新列标签:

df2 = df2.rename(columns=dict(zip(list(df2.columns)[0:3], ["symbol","field","abc"])))

...或像这样:

df2.columns = ["symbol","field","abc"] + list(df2.columns)[3:]

输出:

   COLA  COL_B  testC
0     1      2      3
1    10     11     12
 <class 'pandas.core.frame.DataFrame'>
 Index(['COLA', 'COL_B', 'testC'], dtype='object')
 <class 'pandas.core.indexes.base.Index'>
 ['COLA' 'COL_B' 'testC']
 <class 'numpy.ndarray'>
   COLA  COL_B  testC
0     1      2      3
1    10     11     12
 <class 'pandas.core.frame.DataFrame'>
 Index(['COLA', 'COL_B', 'testC'], dtype='object')
 <class 'pandas.core.indexes.base.Index'>
 ['COLA' 'COL_B' 'testC']
 <class 'numpy.ndarray'>

 after renaming the columns:
   symbol  field  abc
0       1      2    3
1      10     11   12
df2["symbol"]
0     1
1    10
Name: symbol, dtype: int64

请注意, Index.values的文档有一条警告,内容如下:

我们建议使用 Index.array 或 Index.to_numpy(),具体取决于您是否需要对基础数据或 NumPy 数组的引用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM