选择一个pandas DataFrame的行,最多只有一个空条目

时间:2018-06-11 02:03:07

标签: python pandas dataframe nan

如果我需要从数据框中选择,其中列col1和col2必须遵循至少其中一列不必为空的条件。

现在,我正尝试在下面执行,但它不起作用

df=df.loc[(df['Cat1_L2'].isnull()) & (df['Cat2_L3'].isnull())==False]

2 个答案:

答案 0 :(得分:2)

<强>设置
(修改U8-Forward的数据)

(function(){

  var carouselCellUnitHeight = $('.carousel .carousel__cell').height(),
  carouselCellCounts = $('.carousel .carousel__cell').length,
  moveDis = -(carouselCellUnitHeight * ((carouselCellCounts/2)-1)),

  $('.carousel__content-wrapper').css({
    'transform' : 'translateY('+ moveDis +'px)'
  });

})(); 

使用df = pd.DataFrame({'Cat1_L2':[1,np.nan,3, np.nan], 'Cat3_L3': [np.nan,3,4, np.nan]}) df Cat1_L2 Cat3_L3 0 1.0 NaN 1 NaN 3.0 2 3.0 4.0 3 NaN NaN + isna

进行索引

修复代码,确保sum个案例(列中对应True)的数量小于2。

NaN
带有df[df[['Cat1_L2', 'Cat3_L3']].isna().sum(axis=1) < 2] Cat1_L2 Cat3_L3 0 1.0 NaN 1 NaN 3.0 2 3.0 4.0

dropna
thresh

答案 1 :(得分:1)

一种方法是使用df.dropna(subset=['Cat1_L2', 'Cat3_L3'], thresh=1) Cat1_L2 Cat3_L3 0 1.0 NaN 1 NaN 3.0 2 3.0 4.0 遍历每一行。要知道这在计算上是昂贵的。

1 - 创建列表,使用itertuples()

清除每行的条件
itertuples()

<强> 2。将列表转换为pandas系列

condition_list = []
for row in df.itertuples():
    if (row.Cat1_L2 != None) or (row.Cat2_L3 != None):
       condition_list.append(1)
    else:
       condition_list.append(0)

第3。将系列追加到原始df

 condition_series = pd.Series(condition_list)

<强> 4。过滤df

df['condition_column'] = condition_series.values