如何过滤 NA 值并将其添加到新的 DataFrame

How to filter NA values and add it to a new DataFrame

我有一个 .csv 格式的输入数据集,我试图将其输入 python 并进行一些数据分析。示例格式如下:

col1   col2   col3   col4   col5
 1      0      0      1      NA
 2      3      5      1      NA
 1      1      4      6      NA
 7      8      9      1      1 
 12     13     0      34     5
 4      5      6      1      2

如果您看到这里,第 5 列有 NA 值。我需要单独过滤这个 NA 值,这样所有具有 NA 值的行都应该从这个数据框中删除并复制到新的数据框中,这样得到的数据框应该如下所示:

具有 NA 值的数据框:

   col1   col2   col3   col4   col5
    1      0      0      1      NA
    2      3      5      1      NA
    1      1      4      6      NA

没有 NA 值的数据帧:

    col1   col2   col3   col4   col5
     7      8      9      1      1 
     12     13     0      34     5
     4      5      6      1      2

我应该得到上面提到的两个数据帧,它们将在我的进一步分析中使用。我正在寻找 python - pandas 代码,以编程方式实现这些方法。有人可以帮我解决这个问题吗?

假设在读入之后,您的 col5 包含真正的 NaN 而不是字符串 NA,您可以简单地使用 whether they're null to select from df:

>>> key = df["col5"].isnull()
>>> df_NA = df.loc[key]
>>> df_notNA = df.loc[~key]
>>> df_NA
   col1  col2  col3  col4  col5
0     1     0     0     1   NaN
1     2     3     5     1   NaN
2     1     1     4     6   NaN
>>> df_notNA
   col1  col2  col3  col4  col5
3     7     8     9     1   1.0
4    12    13     0    34   5.0
5     4     5     6     1   2.0

或者,您可以使用 groupby,这在这里可能有点矫枉过正,但当需要考虑的情况不仅仅是两个时,效果很好:

>>> dfs = dict(list(df.groupby(df["col5"].isnull())))
>>> dfs[False]
   col1  col2  col3  col4  col5
3     7     8     9     1   1.0
4    12    13     0    34   5.0
5     4     5     6     1   2.0
>>> dfs[True]
   col1  col2  col3  col4  col5
0     1     0     0     1   NaN
1     2     3     5     1   NaN
2     1     1     4     6   NaN