首页 > 解决方案 > 如何使用熊猫检查数据框中的两列是否都有值

问题描述

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

bec 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

标签: pandas

解决方案


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

方法一:使用Boolean indexingwithnotnull

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 发表评论后进行编辑。我们可以使用dropnawith subsetwhich 给出相同的输出:

方法二:使用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()方法。


推荐阅读