You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

使用numpy where提取DataFrame行报错:IndexingError: Too many indexers

解决Pandas提取Budget列值为0的行时的IndexingError问题

嘿,这个问题我之前处理过,咱们来快速搞定它~

为什么会报错?

你用的np.where(dataFrameTrain['budget']==0)返回的是一个包含行索引数组的元组(比如格式像(array([1,3,5]),)),而iloc会把这个元组当成多个独立的索引器来处理,自然就触发了"Too many indexers"的异常啦。

几种可行的解决方案

  • 方案1:最简洁的布尔索引(推荐)
    这是Pandas筛选行的标准操作,代码直观又不容易出错:

    dataFrameTrain[dataFrameTrain['budget'] == 0]
    
  • 方案2:修正np.where的用法
    如果你非要用np.where,只需要提取元组里的第一个元素(也就是真正的行索引数组)就行:

    dataFrameTrain.iloc[np.where(dataFrameTrain['budget']==0)[0], :]
    
  • 方案3:用loc替代iloc(可选)
    要是你的行标签是默认的整数序列,也可以用loc来实现,同样需要提取np.where返回的索引数组:

    dataFrameTrain.loc[np.where(dataFrameTrain['budget']==0)[0], :]
    

小提示

日常筛选行优先用布尔索引,不仅代码可读性更高,执行效率也很出色,除非你有特殊场景需要用到np.where的返回值,不然第一种方案绝对是最优解~

内容的提问来源于stack exchange,提问作者V K

火山引擎 最新活动