首页 > 解决方案 > ValueError:Series 的真值不明确。使用 a.empty、a.bool()、a.item()、a.any() 或 a.all():返回具有空值的列

问题描述

我正在处理信用风险分析项目的缺失数据。Dataframe 的许多列中存在缺失值。 数据框loan_data如下:

[IN]: loan_data
[OUT]:

Emp_ID   Emp_Name    City_Name     Salary      Designation  Emp_years Age
  1        A           Delhi       30,00,000      GM          15       45
  2        B           Mumbai       NAN        Clerk          2        22
  3        c           NAN          NAN         Peon          4        18
  4        D           Chennai      7,000       NAN           5        20
  5        E           NAN          NAN          NAN          4        50

等等....

现在我希望显示的唯一列应该是那些我有 NAN 值并且我想要它们的总和(有多少行有 NAN 值

例如,

[IN]: 
def return_loan_data_missing(x):
if (x.isnull().sum()>0):
    return x.isnull().sum()

return_loan_data_missing(loan_data)

[OUT]:
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), 
a.item(), a.any() or a.all().

所需的输出:

 [OUT]:
 City_Name 2     
 Salary 3
 Designation 2

现在输出我得到:

 [IN]:
  loan_data.isnull().sum()
 [OUT]:
 Emp_ID 0
 Emp_Name 0
 City_Name 2
 Salary 3
 Designation 2
 Emp_years 0
 Age 0

请帮忙

标签: pythonpandas

解决方案


您可以过滤Series更大的0

s = loan_data.isnull().sum()
s = s[s > 0]

或者使用callable进行过滤:

s = loan_data.isnull().sum().loc[lambda x: x > 0]

print (s)
City_Name      2
Salary         3
Designation    2
dtype: int64

如果至少有一个True在掩码中,则应通过 test 更改您的功能Series.any

def return_loan_data_missing(x):
    s = x.isnull().sum()
    m = s > 0
    if m.any():
        return s[m]
    else:
        return 'No missing value in data.'

print (return_loan_data_missing(loan_data))
City_Name      2
Salary         3
Designation    2
dtype: int64

推荐阅读