在Python中从DataFrame中删除None值



具有以下数据帧:

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
    

最新更新