pandas hasnan() pada Seri memberikan "TypeError: objek 'numpy.bool_' tidak dapat dipanggil

Dalam pengujian saya, saya memiliki metode check_nulls untuk memeriksa kolom tertentu untuk nol

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

Kesalahan terjadi di df[column].hasnans() Ini memberi saya typeError pada beberapa tabel.

TypeError: 'numpy.bool_' object is not callable

Pada awalnya saya pikir itu adalah masalah dengan kolom int yang tidak memiliki nol nyata dan karena jika mereka memiliki nol mereka akan dikonversi ke kolom float. Saya menambahkan pengecualian itu dari pemeriksaan tetapi sekarang saya menemukan kolom dengan tipe d "objek" yang memberi saya kesalahan juga.

Bagaimana saya bisa memeriksa null dengan benar di kolom pada kerangka data saya? Saya memeriksa jenis df[kolom] dan itu sebenarnya adalah Seri.


person lathomas64    schedule 16.10.2015    source sumber


Jawaban (2)


hasnans adalah nilai boolean sederhana, bukan metode, jadi Anda tidak bisa memanggilnya.

Namun, menurut saya ini bukan cara yang dapat diandalkan untuk menentukan apakah suatu Seri berisi nans. Itu tidak diperbarui jika Anda memodifikasi Seri:

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

Untuk memeriksa apakah suatu Seri berisi nans, gunakan if mySeries.isnull().any().

person BrenBarn    schedule 16.10.2015

Wow, saya merasa konyol tentang hal ini tetapi akan meninggalkan pertanyaan itu kalau-kalau ada orang lain yang melakukan kesalahan bodoh yang sama.

hasnans adalah boolean bukan fungsi solusinya adalah dengan tidak mencoba memanggilnya

df[kolom].hasnans bukan df[kolom].hasnans()

person lathomas64    schedule 16.10.2015