如何使用熊猫检查数据框中的两个列是否都具有值

时间:2019-04-30 08:51:40

标签: pandas

I have a df:
col1   col2   col3   col4    col5
bat    cell   val            val
cat    ribo   val    val
rat    dna    val            val
dog    rna    val    val     val

如果我正在比较col4和col5,我想获得的输出为:

col1   col2   col3   col4    col5
dog    rna    val    val     val

因为col4有值,而col5有值。

如果我比较col3和col5,我应该得到的输出为:

col1   col2   col3   col4    col5
bat    cell   val            val
rat    dna    val            val
dog    rna    val    val     val

但是当我使用以下代码时:

dfn = df[df['col4'] != df['col5']]

没有获得正确的df值。

并且我想将输出添加到数据框为:

col1   col2   col3   col5
dog    rna    val    val

2 个答案:

答案 0 :(得分:2)

我们可以为此编写一个简单的函数来比较空的列和行:

方法1:将Boolean indexingnotnull一起使用

df.replace('', np.NaN, inplace=True)

def compare_cols(dataframe, column1, column2):
    return df[df[column1].notnull() & df[column2].notnull()]

print(compare_cols(df, 'col4', 'col5'))
print('\n')
print(compare_cols(df, 'col3', 'col5'))

  col1 col2 col3 col4 col5
3  dog  rna  val  val  val


  col1  col2 col3 col4 col5
0  bat  cell  val  NaN  val
2  rat   dna  val  NaN  val
3  dog   rna  val  val  val

在Jezraels评论后,

编辑。我们可以将dropnasubset一起使用,以产生相同的输出:

方法2:使用dropna

def compare_cols2(dataframe, column1, column2):
    return df.dropna(subset=[column1, column2]) 

print(compare_cols2(df, 'col4', 'col5'))
print('\n')
print(compare_cols2(df, 'col3', 'col5'))

  col1 col2 col3 col4 col5
3  dog  rna  val  val  val


  col1  col2 col3 col4 col5
0  bat  cell  val  NaN  val
2  rat   dna  val  NaN  val
3  dog   rna  val  val  val

注意,我用NaN替换了空格(''),以便我们可以使用notnull()方法。

答案 1 :(得分:0)

 #can you try below
    df1=df.loc[(df['col4'].notnull() & df['col5'].notnull()),:]]
    print(df1)