在我的测试中,我有一个方法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]的类型,它实际上是一个系列。
答案 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()