Pandas - 排除数字列为 NaN 的行

16 浏览
0 Comments

Pandas - 排除数字列为 NaN 的行

这个问题已经有了答案:

如何删除Pandas DataFrame中某一列值为NaN的行

pandas中更好的删除NaN行的方法

在Pandas的数据框中,有一些是数值型的列,有一些行在其中的某一个数值型的列是NaN。

我知道如何选择这些数值型的列:

df.select_dtypes(include=np.number)

但是如何排除那些其中一个数值型的列的值是NaN的行呢?

很抱歉我的描述可能不够清晰,所以我添加了更多的细节来澄清它。希望能更清楚。

假设有如下数据框:

有四列:A、B、C和D。A和C的数据类型为Object,B和D的数据类型为Float。

A(Object)   B(Float)C(Object)   D(Float)
Apple       NaN     String1     1.0
Orange      2.0     NaN         3.0
Banana      4.0     String2     5.0
NaN         1.0     String3     2.0
Pear        NaN     String4     3.0
Melon       2.0     String5     NaN

我们将仅删除那些某些数值型列(float)为NaN的行,那些非数值类型列(Object)为NaN的行不应该被删除。

最终结果如下:

A(Object)   B(Float)C(Object)   D(Float)
Orange      2.0     NaN         3.0
Banana      4.0     String2     5.0
NaN         1.0     String3     2.0

我考虑使用lambda和pipeline的方式。任何能给出提示的人都将不胜感激!

非常感谢!

admin 更改状态以发布 2023年5月21日
0
0 Comments

df = pd.DataFrame({'A': [1,np.nan,-2,0,0], 'B': [0, 0, 0, 3, -2], 'C' : [0, 0, -2, np.nan, 0], 'D': [0, -3, 2, 1, -2]} )

df.dropna(inplace=True)

0是默认轴,inplace参数通常更具效率--不需要复制数据帧。

0
0 Comments

让我们试试:

数据

df = pd.DataFrame({'A': [1,np.nan,-2,0,0], 'B': [0, 0, 0, 3, -2], 'C' : [0, 0, -2, np.nan, 0], 'D': [0, -3, 2, 1, -2]} )  

解决方案

df1=df.dropna(0)

0