检索具有NAN值而不是NAN值的数据帧的行

时间:2019-01-18 20:59:20

标签: python-3.x pandas dataframe

我有一个数据帧df:

   DT   RE   FE   SE C_Step
0  D1   E1   F1   S1   poor
1  D2   E3   F2  NaN    NaN
2  D1   E3  NaN   S2   good
3  D1  NaN   F1   S1   poor
4  D2  NaN   F1   S2   poor
5  D2   E3  NaN   S1   fair
6  D1   E3   F1   S2   fair
7  D2   E2   F1   S1    NaN

我想收回数据帧df的前四列中没有无NAN值的df1,以及数据帧df的前四列中具有 NAN值的df2。

所需的输出:

df1 =

   DT   RE   FE   SE C_Step
0  D1   E1   F1   S1   poor
1  D1   E3   F1   S2   fair
2  D2   E2   F1   S1    NaN

df2 =

   DT   RE   FE   SE C_Step
0  D2   E3   F2  NaN    NaN
1  D1   E3  NaN   S2   good
2  D1  NaN   F1   S1   poor
3  D2  NaN   F1   S2   poor
4  D2   E3  NaN   S1   fair

2 个答案:

答案 0 :(得分:2)

使用dropna

df1 = df.dropna(subset = ['DT','RE','FE','SE'])
df2 = df.loc[~df.index.isin(df.dropna(subset = ['DT','RE','FE','SE']).index)]

df1

    DT  RE  FE  SE  C_Step
0   D1  E1  F1  S1  poor
6   D1  E3  F1  S2  fair
7   D2  E2  F1  S1  NaN


df2

    DT  RE  FE  SE  C_Step
1   D2  E3  F2  NaN NaN
2   D1  E3  NaN S2  good
3   D1  NaN F1  S1  poor
4   D2  NaN F1  S2  poor
5   D2  E3  NaN S1  fair

选项2:查找具有空值的行

null_idx = df.index.difference(df.dropna(subset = ['DT','RE','FE','SE']).index)
df.iloc[null_idx]

答案 1 :(得分:1)

使用isnull + any创建遮罩:

m = df.iloc[:, 0:4].isnull().any(1)

df1 = df[~m]
#   DT  RE  FE  SE C_Step
#0  D1  E1  F1  S1   poor
#6  D1  E3  F1  S2   fair
#7  D2  E2  F1  S1    NaN

df2 = df[m]
#   DT   RE   FE   SE C_Step
#1  D2   E3   F2  NaN    NaN
#2  D1   E3  NaN   S2   good
#3  D1  NaN   F1   S1   poor
#4  D2  NaN   F1   S2   poor
#5  D2   E3  NaN   S1   fair