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]
我正在使用 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]