【问题标题】:Pandas, list all the columns that have null values for each rowPandas,列出每行具有空值的所有列
【发布时间】:2021-01-24 07:07:43
【问题描述】:

我有以下df:

mask = df.apply(lambda row: True if row.isnull().any() else False, axis=1)
df[HAS_MISSING_VALUES] = mask
         date      kpi1       kpi2      kpi3      location has_missing_values
0  2019-01-25      147.0      nan       82.876859   team1   True
1  2019-01-26      147.0      41.0      71.178657   team1   False
2  2019-01-27      nan        42.0      81.812117   team2   True
3  2019-01-28      147.0      42.0      75.754279   team2   False
4  2019-01-29      nan        42.0      nan         team4   True
5  2019-01-30      nan        nan       nan         team4   True

我需要为每一行创建一个新列,其中包含其空值名称。

例如,输出将是:

         date      kpi1       kpi2      kpi3      location missing_kpis
0  2019-01-25      147.0      nan       82.876859   team1  [kpi2]
1  2019-01-26      147.0      41.0      71.178657   team1  []
2  2019-01-27      nan        42.0      81.812117   team2  [kpi1]
3  2019-01-28      147.0      42.0      75.754279   team2  []
4  2019-01-29      nan        42.0      nan         team4  [kpi1,kpi3]
5  2019-01-30      nan        nan       nan         team4  [kpi1,kpi2,kpi3]

但被卡住了

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:

    这是我想出的,希望这能回答你的问题

    missing = []
    for row in data.index:
      missing.append(list(data.iloc[row][data.iloc[row].isnull()].index))
    
    data['Has_Missing_values'] = missing
    print(data)
    

    【讨论】:

      【解决方案2】:

      您可以将isnullapply 一起使用。

      df['missing_kpis'] = df.apply(lambda x: ','.join(x[x.isnull()].index),axis=1)
      

      测试

      df
               date   kpi1  kpi2       kpi3 location
      0  2019-01-25  147.0   NaN  82.876859    team1
      1  2019-01-26  147.0  41.0  71.178657    team1
      2  2019-01-27    NaN  42.0  81.812117    team2
      3  2019-01-28  147.0  42.0  75.754279    team2
      4  2019-01-29    NaN  42.0        NaN    team4
      5  2019-01-30    NaN   NaN        NaN    team4
      df['missing_kpis'] = df.apply(lambda x: ','.join(x[x.isnull()].index),axis=1)
      df
               date   kpi1  kpi2       kpi3 location    missing_kpis
      0  2019-01-25  147.0   NaN  82.876859    team1            kpi2
      1  2019-01-26  147.0  41.0  71.178657    team1                
      2  2019-01-27    NaN  42.0  81.812117    team2            kpi1
      3  2019-01-28  147.0  42.0  75.754279    team2                
      4  2019-01-29    NaN  42.0        NaN    team4       kpi1,kpi3
      5  2019-01-30    NaN   NaN        NaN    team4  kpi1,kpi2,kpi3
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-04-03
        • 2021-10-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-07-19
        • 1970-01-01
        相关资源
        最近更新 更多