首页 > 解决方案 > Python pandas 数据框错误消息:KeyError: “[Index([('var2_1', 'var2_2')], dtype='object')] are in the [columns]”

问题描述

我正在使用 pandas 数据帧,并且遇到了不理解的错误消息

在这个玩具示例中,我有一个数据框,它调用df了许多列('var1_1'、'var1_2'、'var1_3'、'var2_1'、'var2_2'、'var3'),一个var_names1用几个列调用的列表元素('var2'、'var3'、'var1')和一个名为df_list.

我想循环var_names1,以这样一种方式,例如当 for 的var_names1值为 var2 时,我创建一个包含dfvar2_1 和 var2_2 列的新数据框,最后将新数据框附加到df_list.

当我运行代码时,我收到以下错误消息:KeyError: "None of [Index([('var2_1', 'var2_2')], dtype='object')] are in the [columns]"

# TOY DATASET  
cars = {'var1_1': [1, np.nan, np.nan, np.nan],
    'var1_2': [np.nan, 1, 1, np.nan],
    'var1_3': [np.nan, np.nan, 1, np.nan],
    'var2_1': [1, np.nan, 1, np.nan],
    'var2_2': [np.nan, 1, 1, np.nan],
    'var3': [1, np.nan, 1, 1]
    }
df = pd.DataFrame(cars, columns = ['var1_1', 'var1_2', 'var1_3', 'var2_1', 'var2_2', 'var3'])

print(df)
   var1_1  var1_2  var1_3  var2_1  var2_2  var3
0     1.0     NaN     NaN     1.0     NaN   1.0
1     NaN     1.0     NaN     NaN     1.0   NaN
2     NaN     1.0     1.0     1.0     1.0   1.0
3     NaN     NaN     NaN     NaN     NaN   1.0


# CODE
root_names = ['var2', 'var3', 'var1']
df_list = []
for var in root_names:                                                                  
    match_names = [x for x in list(df) if re.match(var,x)]  
    temp_df = df[[match_names]]                        
    df_list.append(temp_df) 


# ERROR MESSAGE 
KeyError: "None of [Index([('var2_1', 'var2_2')], dtype='object')] are in the [columns]"

但是,当我使用一些代码进行检查时(见下文),这些列似乎就在那里。有人可以解释错误信息。谢谢!

root_names = ['var2', 'var3', 'var1']
for var in root_names:
    match_names  = [x for x in list(df) if re.match(var,x)]
    print(match_names)

# Output 
['var2_1', 'var2_2']
['var3']
['var1_1', 'var1_2', 'var1_3']

df[['var2_1', 'var2_2']]
# Output 
   var2_1  var2_2
0     1.0     NaN
1     NaN     1.0
2     1.0     1.0
3     NaN     NaN

标签: pythonpandasdata-science

解决方案


此错误表示 Dataframe 数据集中缺少某些列。尝试替换temp_df = df[[match_names]]temp_df = df[match_names].

您试图传递值列表的列表,而不是值列表(列名)


推荐阅读