Pandas DataFrame索引,选择具有NaN值

时间:2018-05-01 13:39:28

标签: python pandas dataframe

考虑到我有一个pandas数据帧作为以下示例(在真实数据集中有更多的行/列):

   | t1 | val1 | val2 | val3 | val4
------------------------------------
  0| 1  | 1    | NaN  | NaN  | NaN
  1| 2  | 12   |  5   | NaN  | 4
  2| 3  | 104  |  6   | NaN  | NaN
  3| 4  | -1   |  7   | 6    | NaN
  4| 1  | -3   |  8   | 7    | 10

我想只提取t1 == 1的行,val2,val3和val4是NaN值,只有部分列。

例如,在上面的数据框中,我想只得到第一行。

到目前为止,我已尝试过以下内容及其中的一些变体,并不缺乏:

我已为我感兴趣的列定义了标签列表:

labels = [ 't1', 'val2', 'val3', 'val4']

然后我运行以下代码来获取t1 == 1且只有指定列的所有值。

df2 = df.loc[df.t1 == 1, labels]

之后我试图只获得val2,val3和val4同时为NaN的行。 我编写了以下代码,但它似乎不起作用:

df3 = df2.loc[df2[labels].isnull() == True, labels]

但它返回以下错误:

ValueError: Cannot index with multidimensional key

你知道什么是错的吗?或者我希望获得结果的另一种方式?

提前致谢。

1 个答案:

答案 0 :(得分:1)

您应该使用all

df2[df2[['val2','val3','val4']].isnull().all(1)]
Out[544]: 
   t1  val2  val3  val4
0   1   NaN   NaN   NaN