与行筛选器一起使用的熊猫loc方法抛出一个错误
test[test.loc[0:1,['holiday','weekday']].apply(lambda x:True,axis=1)]
IndexingError:作为索引器提供的不可对齐布尔序列(布尔序列和索引对象的索引不匹配)。
而没有行筛选器的相同代码可以正常工作。
test[test.loc[0:1,['holiday','weekday']].apply(lambda x:True,axis=1)]
复制步骤
test=pd.DataFrame({"holiday":[0,0,0],"weekday":[1,2,3],"workingday":[1,1,1]})
test[test.loc[:,['holiday','weekday']].apply(lambda x:True,axis=1)] ##works fine
test[test.loc[0:1,['holiday','weekday']].apply(lambda x:True,axis=1)] ##fails
我试图弄清楚这两者之间的区别是什么,它使一个失败,而另一个成功。
发布于 2020-11-26 08:25:15
因此,基本语法是DataFrame[things to look for, e.g row slices or columns]
,考虑到这一点,您正在尝试使用以下命令(括号中的代码片段)筛选数据格式test
:
test.loc[:,['holiday','weekday']].apply(lambda x:True,axis=1)
这将对数据文件中的每一行返回True
,因此“筛选器”返回整个数据
test.loc[0:1,['holiday','weekday']].apply(lambda x:True,axis=1)
这个部分本身是工作的,它是这样做的,通过切片行0和1,然后应用lambda函数。因此,“过滤器”只包含2行的True。现在的重点是,第三行没有值,这会导致您的错误:必须切片的数据的索引(3行)和分割它的布尔序列(2个值)不匹配。
解决这个问题取决于您实际希望作为输出的是什么,即是否只将lambda函数应用于数据的一个子集,还是只希望检索结果的一个子集使用。
https://stackoverflow.com/questions/65015982
复制