python - 如何在整个 DataFrame 中首次出现“NaN”后删除或删除所有行
问题描述
我期待在NaN
基于任何 dataFrame 列的第一次出现后删除/删除所有行。
我创建了两个示例数据帧,如下图所示,第一个数据帧dtypes
用于初始两列,object
而最后一个在 中int
,而在第二个数据帧中,它们是float
,obj
和int
.
第一的:
>>> 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
正在寻找数据帧级别的操作,但不限于一列。obj
int
>>> 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 并删除所有行。
解决方案
你可以试试:
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
推荐阅读
- javascript - 用 Observable 包装一个函数来创建一个热监听器
- javascript - 角度 8 中的 OAuth2 客户端 ID 和客户端密钥
- android - 如何以编程方式将复选框文本向左移动
- python - python csv过滤器对和非对
- qt - Qt Installer Framework - 更新控制脚本
- php - How to loop through an array in php with formatted html design?
- reactjs - 即使没有可用的系列数据,如何显示顶点图表 (ReactJS) 的图例
- css - 如何为 Safari 制作这个?
- javascript - 如何托管只有 html、javascript 渲染的 mysql 服务器
- postgresql - 仅索引扫描需要更长的时间才能运行