我有一个数据帧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
答案 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