系列中的pandas hasnan()给出" TypeError:' numpy.bool _'对象不可调用

时间:2015-10-16 19:36:05

标签: python numpy pandas null nan

在我的测试中,我有一个方法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列没有真正的null,因为如果他们有一个null他们将被转换为一个浮动列我添加了从检查豁免,但我现在遇到一个列与一个"对象"那也给了我错误。

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

2 个答案:

答案 0 :(得分:3)

hasnans是一个简单的布尔值,而不是方法,所以你不能调用它。

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

>>> 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

要检查系列是否包含nans,请使用if mySeries.isnull().any()

答案 1 :(得分:0)

哇我对此感到愚蠢,但是如果其他人犯了同样的愚蠢错误,我会留下这个问题。

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

df [column] .hasnans not df [column] .hasnans()