pandas hasnan () в серии выдает «TypeError: объект 'numpy.bool_' не вызывается

В моих тестах у меня есть метод 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: 'numpy.bool_' object is not callable

Сначала я подумал, что это проблема столбцов int, не имеющих реального нуля, и поскольку, если бы у них был нуль, они были бы преобразованы в столбец с плавающей запятой, я добавил это исключение из проверки, но теперь я сталкиваюсь с столбцом с типом d «объект», который также дает мне ошибку.

Как я могу правильно проверить наличие нулей в столбце моего фрейма данных? Я проверил тип df[column], и на самом деле это серия.


person lathomas64    schedule 16.10.2015    source источник


Ответы (2)


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().

person BrenBarn    schedule 16.10.2015

Ничего себе, я чувствую себя глупо по этому поводу, но оставлю вопрос на случай, если кто-то еще совершит ту же глупую ошибку.

hasnans - это логическое значение, а не функция, решение состоит в том, чтобы не пытаться ее вызывать.

df[column].hasnans не df[column].hasnans()

person lathomas64    schedule 16.10.2015