pandas hasnan() บน Series ให้ "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 ในบางตาราง

TypeError: 'numpy.bool_' object is not callable

ตอนแรกฉันคิดว่ามันเป็นปัญหาที่คอลัมน์ int ไม่มีค่าว่างจริง และเนื่องจากหากคอลัมน์นั้นเป็นค่าว่าง พวกเขาจะถูกแปลงเป็นคอลัมน์ float ฉันเพิ่มการยกเว้นจากการตรวจสอบ แต่ตอนนี้ฉันกำลังพบคอลัมน์ที่มี dtype เป็น "วัตถุ" ที่ทำให้ฉันเกิดข้อผิดพลาดเช่นกัน

ฉันจะตรวจสอบค่าว่างในคอลัมน์บน dataframe ของฉันได้อย่างไร ฉันตรวจสอบประเภทของ df[column] แล้ว และจริงๆ แล้วมันคือซีรีส์


person lathomas64    schedule 16.10.2015    source แหล่งที่มา


คำตอบ (2)


hasnans เป็นค่าบูลีนอย่างง่าย ไม่ใช่วิธีการ ดังนั้นคุณจึงไม่สามารถเรียกมันได้

อย่างไรก็ตาม ฉันไม่คิดว่านี่เป็นวิธีที่น่าเชื่อถือในการพิจารณาว่าซีรีส์มีนาโนหรือไม่ จะไม่อัปเดตหากคุณแก้ไขซีรี่ส์:

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

หากต้องการตรวจสอบว่าซีรีส์มีแนนหรือไม่ ให้ใช้ if mySeries.isnull().any()

person BrenBarn    schedule 16.10.2015

ว้าว ฉันรู้สึกงี่เง่าเกี่ยวกับเรื่องนี้ แต่จะทิ้งคำถามไว้เผื่อว่าคนอื่นทำผิดพลาดโง่ๆ แบบเดียวกัน

hasnans เป็นบูลีน ไม่ใช่ฟังก์ชัน วิธีแก้ไขคือไม่ต้องพยายามเรียกมัน

df[คอลัมน์].hasnans ไม่ใช่ df[คอลัมน์].hasnans()

person lathomas64    schedule 16.10.2015