Series 上的 pandas hasnan() 给出“TypeError:'numpy.bool_' 对象不可调用
2015-10-16
1250
在我的测试中,我有一个方法 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 列没有真正的空值,因为如果它们有空值,它们将被转换为浮点列,所以我添加了该检查豁免,但现在我遇到了一个 dtype 为“object”的列,它也给出了错误。
如何正确检查数据框中某一列是否为空?我检查了 df[column] 的类型,它实际上是一个系列。
2个回答
hasnans
是一个简单的布尔值,而不是方法,因此您无法调用它。
但是,我认为这不是确定 Series 是否包含 nan 的可靠方法。如果您修改 Series,它不会更新:
>>> 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
要检查 Series 是否包含 nan,请使用
if mySeries.isnull().any()
。
BrenBarn
2015-10-16
哇,我觉得这很傻,但我会留下这个问题,以防别人犯同样愚蠢的错误。
hasnans 是一个布尔值,而不是一个函数,解决方案是不要尝试调用它
df[column].hasnans 不是 df[column].hasnans()
lathomas64
2015-10-16