Python pandas data frame error message: KeyError: "None of [Index([('var2_1', 'var2_2')], dtype='object')] are in the [columns]"

Python pandas data frame error message: KeyError: "None of [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,这样当 var_names1 的值为 var2 时,我创建一个包含 df 列 [=53] 的新数据框=] 和 var2_2,最后将新数据帧附加到 df_list.

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

# 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

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

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

match_names 已经是一个列表,您不必将它进一步包含在 []

替换这个,

temp_df = df[[match_names]]

有了这个

temp_df = df[match_names]