KeyError: '[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23\n 24 25 26 27 28 29] not in index'
时间: 2024-01-05 14:03:31 浏览: 134
这个错误通常是由于指定的列索引在 dataframe 中不存在导致的。在这段代码中,指定的列索引是0到29,表示要对 dataframe 中的前30列进行独热编码处理。如果 dataframe 中的列数不足30列,就会出现上述错误。
可能的原因包括:
1. 导入的数据集中列数不足30列,需要检查数据集是否正确导入并且包含足够的列。
2. 指定的列索引有误,需要检查列索引是否正确。
建议检查一下数据集的列数以及指定的列索引是否正确。
相关问题
解释KeyError: "None of [Index([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18,\n 19, 20, 21, 22, 23, 24],\n
这个错误通常是因为你试图访问字典或者 Pandas DataFrame 中不存在的键。在这个错误信息中,出现了一个索引列表,表示你在尝试使用这个索引来访问 DataFrame 或者其他数据结构中的元素时,出现了 KeyError。
具体来说,这个错误信息的含义是:你尝试使用一个名为 [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24] 的索引来访问 DataFrame 中的元素,但是这个索引并不存在于 DataFrame 中,因此出现了 KeyError 错误。
要解决这个问题,你需要检查一下你的代码,确定你正在使用正确的键来访问 DataFrame 中的元素。如果你不确定哪个键是正确的,可以打印出 DataFrame 的内容,检查一下其中的键名是否与你尝试使用的键相匹配。
修改代码中的错误#include "oled.h" #include "oledfont.h" #include "matrix_key.h" #define PassWord_MAX_Num 8 void password_correct() { OLED_ShowCHinese(16,2,20,1); OLED_ShowCHinese(32,2,21,1); OLED_ShowCHinese(48,2,24,1); OLED_ShowCHinese(64,2,25,1); } void password_Error() { OLED_ShowCHinese(16,2,20,1); OLED_ShowCHinese(32,2,21,1); OLED_ShowCHinese(48,2,22,1); OLED_ShowCHinese(64,2,23,1); } void password_input() { OLED_ShowCHinese(0,0,17,0); OLED_ShowCHinese(16,0,18,0); OLED_ShowCHinese(32,0,19,0); OLED_ShowCHinese(48,0,20,0); OLED_ShowCHinese(64,0,21,0); } uint8_t flag=1; void oled_xs(){ if(flag==1){ password_input(); } if(flag==2){ password_correct(); } if(flag==3){ password_Error(); } } void oled_skip(uint8_t num) { OLED_Clear(); flag = num; } uint8_t PassWord[PassWord_MAX_Num+1] = "123456\0"; uint8_t PassWord_Temp[PassWord_MAX_Num +1]; uint8_t password_verifiers(){ uint8_t n =0; for(n =0;n<PassWord_MAX_Num;n++) { if(PassWord_Temp[n]!=PassWord[n]) return 0; } return 1; } void key_command(){ uint8_t key_num = 0; uint8_t text =0; key_num = matrix_key(); if(flag==1){ if(PassWord_n<PassWord_MAX_Num) { switch(key_num) { case 1 :text ='1';break; case 2 :text ='2';break; case 3 :text ='3';break; case 4 :text ='4';break; case 5 :text ='5';break; case 6 :text ='6';break; case 7 :text ='7';break; case 8 :text ='8';break; case 9 :text ='9';break; case 10 :text ='10';break; case 11 :text ='11';break; case 12 :text ='12';break; case 13 :text ='13';break; case 14 :text ='14';break; default: break; } if(text) { PassWord_Temp[PassWord_n] = text; PassWord_n++; } } if (key_num ==15) { PassWord_Temp[PassWord_n] ='\0'; PassWord_n++; if(password_verifiers()==1) { oled_skip(2); LED2_ON(); } else { oled_skip(3); } } if(key_num ==13) { Clear_PassWord_Temp(); } } }
在代码中,有一个错误是在函数`password_verifiers()`的第7行,`!=`应该改为`!=`。正确的代码如下:
```c
uint8_t password_verifiers(){
uint8_t n =0;
for(n =0;n<PassWord_MAX_Num;n++)
{
if(PassWord_Temp[n]!=PassWord[n])
return 0;
}
return 1;
}
```
另外,在函数`key_command()`中,有两个问题需要注意:
1. `PassWord_n`没有声明。假设它是全局变量,否则需要在函数内部定义。
2. `Clear_PassWord_Temp()`函数没有在代码中出现,需要确认它是否存在。如果不存在,需要自己编写清空`PassWord_Temp`数组的函数。
阅读全文