【问题标题】:How to check constraint of non-null column in python?如何检查python中非空列的约束?
【发布时间】:2020-03-07 18:00:01
【问题描述】:

df1:

   ColumnName   Nullable
0  name         True
1  Desgn        True
2  Emp_number   False
3  Salary       True

df2:

   name     Desgn     Emp_number  Salary
0  krul                125796    45000
1  arnold   lawyer     789632    25000
2  daisy    engg       256498    
3  alex                456985    65884
4  mandy    arch       456258    36958
5  krul     painter    
6  perry               789632 
7  timu     lawyer     
8  timy     lawyer     789632    69822
9  daisy    engg       
10 daisy    engg       256498    54869

如何检查 df2 中可空列 (nullable == True) 的缺失值数量,如果不可空列有缺失值引发错误,否则替换为中位数或众数?

【问题讨论】:

  • 你能添加 df1= 和 df2= 语句,以及给出错误的语句吗?我敢肯定,如果我有这些,至少可以提供最后一个,我可以提供帮助。前两个节省了我重建 df 的时间
  • 我已经编辑了这个问题,请看看...

标签: python python-3.x pandas python-2.7 pandas-groupby


【解决方案1】:

您可以创建一个新对象并计算空值

new_df = df2.replace(to_replace=[None, ''], value=pd.np.nan) 
new_df.isnull().sum() 

In [424]: df.isnull().sum()                                                                                                                                                                                 
Out[424]: 
name          0
Desgn         3
Emp_number    3
Salary        5
dtype: int64

【讨论】:

    【解决方案2】:

    没有 for 循环:

    import pandas as pd
    from io import StringIO
    
    df2 = pd.read_table(StringIO("""   name     Desgn     Emp_number  Salary
    0  krul     nan           125796    45000
    1  arnold   lawyer     789632    25000
    2  daisy    engg       256498    nan
    3  alex      nan          456985    65884
    4  mandy    arch       456258    36958
    5  krul     painter    nan       nan
    6  perry      nan         789632    nan
    7  timu     lawyer     nan     nan
    8  timy     lawyer     789632    69822
    9  daisy    engg       nan       nan
    10 daisy    engg       256498    54869"""), sep='\s+')
    
    df1 = pd.read_table(StringIO("""   ColumnName   Nullable
    0  name         True
    1  Desgn        True
    2  Emp_number   False
    3  Salary       True"""), sep='\s+')
    
    
    # Transpose switches dtype, so we need to know what they were originally
    a = df2.T.loc[df1.loc[df1.Nullable==True, 'ColumnName']].T
    a = a.astype(df2[a.columns].dtypes.to_dict())
    
    # Replace with median
    df2[a.columns] = a.fillna(a.median())
    
    # If any null in non nullable, raise ValueError
    non_nullable_has_null = df2.T.loc[df1.loc[df1.Nullable==False, 'ColumnName']].T.isnull().any().any()
    if non_nullable_has_null:
        raise ValueError('non nullable has a null')
    

    【讨论】:

      【解决方案3】:
      for idx, row in df1.iterrows():
          if not row["Nullable"]:
              # Get all the rows in df2 which has that column as null
              nulls = df2[df2[row["ColumnName"]].isnull()]
      
              # No of rows that has the column null
              print(len(nulls))
      

      【讨论】:

      • 如果解决方案正确,请接受正确的答案。
      猜你喜欢
      • 2012-03-20
      • 2022-06-07
      • 2021-08-21
      • 2021-11-02
      • 1970-01-01
      • 1970-01-01
      • 2016-02-14
      • 2017-02-18
      • 2020-08-12
      相关资源
      最近更新 更多