具有以下数据帧:
name | aaa | bbb |
---|---|---|
Mick | 无IvanIvan Peter | |
Juli | 1 |
使用:
#DataFrame from sample data
df_out = pd.DataFrame(df_out)
#filter columns names by list and test if NaN or None at least in one row
m = df_out[['aaa','bbb']].isna().any(axis=1)
#OR test both columns separately
m = df_out['aaa'].isna() | df_out['bbb'].isna()
#filter matched and not matched rows
df1 = df_out[m].reset_index(drop=True)
df2 = df_out[~m].reset_index(drop=True)
print (df1)
name aaa bbb
0 Mick None None
1 Ivan-Peter 1 None
print (df2)
name aaa bbb
0 Ivan A C
1 Juli 1 P
DataFrame.dropna
和过滤器索引在df2
中不存在的另一个想法:
df2 = df_out.dropna()
df1 = df_out.loc[df_out.index.difference(df2.index)].reset_index(drop=True)
df2 = df2.reset_index(drop=True)
首先需要将df_out
转换为具有pandas.DataFrame
的数据帧,如下所示
df_out = pd.DataFrame(df_out)
[Out]:
name aaa bbb
0 Mick None None
1 Ivan A C
2 Ivan-Peter 1 None
3 Juli 1 P
然后,对于这两种情况,都可以使用pandas.Series.notnull
。
有值,其中我们在aaa和/或bbb列中有None,在我的代码中命名为filter_nulls
df1 = df_out[~df_out['aaa'].notnull() | ~df_out['bbb'].notnull()]
[Out]:
name aaa bbb
0 Mick None None
2 Ivan-Peter 1 None
我们根本没有None。df_out在我的代码中。
df2 = df_out[df_out['aaa'].notnull() & df_out['bbb'].notnull()]
[Out]:
name aaa bbb
1 Ivan A C
3 Juli 1 P
备注:
如果需要,可以使用
pandas.DataFrame.reset_index
获得以下df_new = df_out[~df_out['aaa'].notnull() | ~df_out['bbb'].notnull()].reset_index(drop=True) [Out]: name aaa bbb 0 Mick None None 1 Ivan-Peter 1 None