在使用jupyter notebook运行ipynb文件时报错,而且我看不明白这个错误的意思,因此就更加难以解决这个问题,而这个错误关于使用pandas对数据进行切片时出错,因此学习panda,目的是想看明白这个错误的意思,然后尝试着解决这个问题。
1.我遇到的问题:运行ipynb文件,错误如下图:
图1 图2 图3错误就如上面的图片所示。
2.我输入的文件的部分内容如下图所示:
图4打印图1的第三个单元格,返回的结果如下图:
图53.为了看明白图1,图2,图3中的错误,学习pandas。
图64. .loc,基于label(标签)的索引
Note:
loc是基于标签的,如果给出的索引中包含没有的标签,会报错 'the label xxx is not in the [index]'
loc索引的开闭区间机制和Python传统的不同,而是与MATLAB类似的双侧闭区间,即只要出现,就会包含该标签
数字也可以放入loc中当做索引,但是这时数字指的是标签而不是位置.当使用数字的时候,这个数字必须是表中的列标签名或者行标签名。
图75. pandas中.iloc函数的使用,基于位置的索引。例如下图的print(df.iloc[3,3])就是4行和第4列(因为索引号都是从0开始,所以这里的3对应表中的第4行和第4列),相当于一个二维坐标系,给出了两横坐标和纵坐标,这就是位置。
如果iloc方括号中直接给定一个数字或者一个slice的话,默认索引的是行。其中数字的情况会返回一个Series
图8 图9 图10 图11 图12图11和图12的这个错误和我的ipynb文件运行的错误(图1到图3)提示一样,但是通过看我的数据,很明显我的ipynb文件的代码的索引标签并不是行的标签,也就是说并不是对行进行索引。图11和图12的错误提示是由于索引表达式的单个标签是行标签,而当索引表达式的为单个标签时只能是列标签,即对列进行索引,因此会出错。
pandas对象中索引既可以用标签也可以用下标(下标:如print(df[0:3])就是使用下标来进行索引,左闭右开)来表示,但是单独索引是将索引表达式优先当做标签使用,又因为在DF对象中单独索引默认为对列索引,因此,这是解释器就会去找例子中的df对象有没有一个列标签为2,结果没有,就报错了。
图13 图14图13和14的错误提示跟我的ipynb文件运行的错误提示一样,所以我的ipynb文件运行的错误的原因可能是由于我的数据问题,或者跟这个错误一样,索引的标签(type_of_gene)不对而出错。
参考来源:
1.pandas入门——数据切片 - Nick的博客 - CSDN博客
网友评论