[英]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.