当前位置: 首页 > 面试题库 >

pandas:IndexingError:作为索引器提供的不可对齐的布尔系列

陈野
2023-03-14
问题内容

我正在尝试运行我认为简单的代码来消除所有NaN的任何列,但无法使其正常工作(axis = 1消除行时效果很好):

import pandas as pd
import numpy as np

df = pd.DataFrame({'a':[1,2,np.nan,np.nan], 'b':[4,np.nan,6,np.nan], 'c':[np.nan, 8,9,np.nan], 'd':[np.nan,np.nan,np.nan,np.nan]})

df = df[df.notnull().any(axis = 0)]

print df

完整错误:

raise IndexingError('Unalignable boolean Series provided as 'pandas.core.indexing.IndexingError: Unalignable boolean Series provided as indexer (index of the boolean Series and of the indexed object do not match

预期产量:

     a    b    c
0  1.0  4.0  NaN
1  2.0  NaN  8.0
2  NaN  6.0  9.0
3  NaN  NaN  NaN

问题答案:

您需要loc,因为按列过滤:

print (df.notnull().any(axis = 0))
a     True
b     True
c     True
d    False
dtype: bool

df = df.loc[:, df.notnull().any(axis = 0)]
print (df)

     a    b    c
0  1.0  4.0  NaN
1  2.0  NaN  8.0
2  NaN  6.0  9.0
3  NaN  NaN  NaN

或过滤列,然后按[]

print (df.columns[df.notnull().any(axis = 0)])
Index(['a', 'b', 'c'], dtype='object')

df = df[df.columns[df.notnull().any(axis = 0)]]
print (df)

     a    b    c
0  1.0  4.0  NaN
1  2.0  NaN  8.0
2  NaN  6.0  9.0
3  NaN  NaN  NaN

dropna使用参数how='all'删除NaN仅由s填充的所有列:

print (df.dropna(axis=1, how='all'))
     a    b    c
0  1.0  4.0  NaN
1  2.0  NaN  8.0
2  NaN  6.0  9.0
3  NaN  NaN  NaN


 类似资料:
  • 本文向大家介绍pandas 布尔索引,包括了pandas 布尔索引的使用技巧和注意事项,需要的朋友参考一下 示例 可以使用布尔数组选择数据框的行和列。 有关熊猫文档的更多信息。

  • 问题内容: 这是我遇到错误的方式: 类型为,其中包含行索引列表。所有这些行索引都属于。 这是我需要过滤的条件。 如果我分别执行以下命令,则不会收到任何警告: 但是,如果将它们放在一起,则会收到警告消息(但可以看到结果): 布尔系列键将重新索引以匹配DataFrame索引 此错误消息是什么意思?它会影响返回的结果吗? 问题答案: 尽管有警告,您的方法仍然可以使用,但是最好不要依赖隐式,不清楚的行为。

  • 问题内容: 这可能是一个非常愚蠢的问题,但是对数据库表中的布尔字段建立索引是否会有很多好处? 在常见情况下,例如标记为“无效”的“软删除”记录,因此大多数查询都包含,这将有助于对该字段进行单独索引,还是应将其与其他常见搜索字段组合在一起?不同的索引? 问题答案: 没有。 您可以对要搜索的字段具有较高的选择性/基数进行索引。几乎所有表都消除了布尔字段的基数。如果有的话,它将使您的写入速度变慢(降低的

  • In[1]: import pandas as pd import numpy as np import matplotlib.pyplot as plt %matplotlib inline 1. 计算布尔值统计信息 # 读取movie,设定行索引是movie_title In[2]: pd.options.display.max_colum

  • In[1]: import pandas as pd import numpy as np 1. 检查索引 # 读取college数据集,提取所有的列 In[2]: college = pd.read_csv('data/college.csv') columns = college.columns columns Out[2]: Index([

  • 问题内容: 我在可为空的列上有一个索引,我想选择所有它的值,如下所示: 在说明计划中,我看到了一个提示(即使提示也无济于事) 确实使用索引… 我用谷歌搜索发现索引中没有空条目,因此第一个查询不能使用索引。 我的问题很简单: 为什么索引中没有空条目? 问题答案: 默认情况下,关系数据库会忽略NULL值(因为关系模型说NULL表示“不存在”)。因此,索引不存储NULL值,因此,如果您在SQL语句中具有