开发者问题收集

Series 上的 pandas hasnan() 给出“TypeError:'numpy.bool_' 对象不可调用

2015-10-16
1250

在我的测试中,我有一个方法 check_nulls 来检查特定列是否为空

def check_nulls(self, name, column_list):
        """ Ensure that the table given has no nulls in any of the listed columns
            @param name the name of the table to check
            @param column_list the columns to check for nulls
        """
        df =  util.TABLES.load_table(name,
                                            config.get_folder("TRANSFORMED_FOLDER"),
                                     sep='|')
        #print df
        for column in column_list:
            print df[column].dtypes
            print df[column]
            self.assertFalse(df[column].dtypes != "int32" 
                                and df[column].dtypes != "int64" 
                                and df[column].hasnans(),
                             '{0} in {1} contains null values'\
                             .format(column, name))

错误发生在 df[column].hasnans() 中,它在某些表上给出了 typeError。

TypeError: 'numpy.bool_' object is not callable

起初我以为是 int 列没有真正的空值,因为如果它们有空值,它们将被转换为浮点列,所以我添加了该检查豁免,但现在我遇到了一个 dtype 为“object”的列,它也给出了错误。

如何正确检查数据框中某一列是否为空?我检查了 df[column] 的类型,它实际上是一个系列。

2个回答

hasnans 是一个简单的布尔值,而不是方法,因此您无法调用它。

但是,我认为这不是确定 Series 是否包含 nan 的可靠方法。如果您修改 Series,它不会更新:

>>> x = pandas.Series([1, 2, 3])
>>> x.hasnans
False
>>> x[1] = np.nan
>>> x
0     1
1   NaN
2     3
dtype: float64
>>> x.hasnans
False

要检查 Series 是否包含 nan,请使用 if mySeries.isnull().any()

BrenBarn
2015-10-16

哇,我觉得这很傻,但我会留下这个问题,以防别人犯同样愚蠢的错误。

hasnans 是一个布尔值,而不是一个函数,解决方案是不要尝试调用它

df[column].hasnans 不是 df[column].hasnans()

lathomas64
2015-10-16