首页 > 解决方案 > 如何在整个 DataFrame 中首次出现“NaN”后删除或删除所有行

问题描述

我期待在NaN基于任何 dataFrame 列的第一次出现后删除/删除所有行。

我创建了两个示例数据帧,如下图所示,第一个数据帧dtypes用于初始两列,object而最后一个在 中int,而在第二个数据帧中,它们是float,objint.

第一的:

>>> df = pd.DataFrame({"A": (1,2,3,4,5,6,7,'NaN','NaN','NaN','NaN'),"B": (1,2,3,'NaN',4,5,6,7,'NaN',"9","10"),"C": range(11)})
>>> df
      A    B   C
0     1    1   0
1     2    2   1
2     3    3   2
3     4  NaN   3
4     5    4   4
5     6    5   5
6     7    6   6
7   NaN    7   7
8   NaN  NaN   8
9   NaN    9   9
10  NaN   10  10

数据类型:

>>> df.dtypes
A    object
B    object
C     int64
dtype: object

在根据特定情况执行以下基于索引的方法时,它可以正常工作,但我dtype正在寻找数据帧级别的操作,但不限于一列。objint

>>> df[:df[df['A'] == 'NaN'].index[0]]
   A    B  C
0  1    1  0
1  2    2  1
2  3    3  2
3  4  NaN  3
4  5    4  4
5  6    5  5
6  7    6  6

>>> df[:df[df['B'] == 'NaN'].index[0]]
   A  B  C
0  1  1  0
1  2  2  1
2  3  3  2

第二:

另一个有趣的事实是在创建 DataFrame 时np.nan我们得到不同的地方dtype,然后即使是基于索引的方法对于单列操作也失败了。

>>> df = pd.DataFrame({"A": (1,2,3,4,5,6,7,np.nan,np.nan,np.nan,np.nan),"B": (1,2,3,np.nan,4,5,6,7,np.nan,"9","10"),"C": range(11)})
>>> df
      A    B   C
0   1.0    1   0
1   2.0    2   1
2   3.0    3   2
3   4.0  NaN   3
4   5.0    4   4
5   6.0    5   5
6   7.0    6   6
7   NaN    7   7
8   NaN  NaN   8
9   NaN    9   9
10  NaN   10  10

数据类型:

>>> df.dtypes
A    float64
B     object
C      int64
dtype: object

错误:

>>> df[:df[df['B'] == 'NaN'].index[0]]
IndexError: index 0 is out of bounds for axis 0 with size 0
>>> df[:df[df['A'] == 'NaN'].index[0]]
IndexError: index 0 is out of bounds for axis 0 with size 0

预期应该是第二个数据帧:

>>> df
      A    B   C
0   1.0    1   0
1   2.0    2   1
2   3.0    3   2

因此,我正在寻找一种方法来检查整个 DataFrame,而不管 DataFrame 中dtype第一次出现 NaN 并删除所有行。

标签: pythonpandasdataframe

解决方案


你可以试试:

out=df.iloc[:df.isna().any(1).idxmax()]

或者

通过replace()将您的字符串“NaN”设置为真正的“NaN”,然后检查缺失值并过滤行:

df=df.replace({'NaN':float('NaN'),'nan':float('NaN')})
out=df.iloc[:df.isna().any(1).idxmax()]

输出out

    A       B   C
0   1.0     1   0
1   2.0     2   1
2   3.0     3   2

推荐阅读