【问题标题】:Pandas - Exclude rows whose numeric columns are NaN [duplicate]Pandas - 排除数字列为 NaN 的行 [重复]
【发布时间】:2021-01-25 16:09:41
【问题描述】:

在 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

我们只会删除一些数字列(浮点数)为 NaN 的行,而那些非数字列(对象)为 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 和管道。 任何可以提供提示的人将不胜感激!

非常感谢!

【问题讨论】:

标签: python pandas data-science


【解决方案1】:

让我们试试:

数据

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)

【讨论】:

  • 感谢您的回复。但是,似乎此代码将删除所有存在 NaN 的行,但它不考虑数据类型为数字的列,例如浮点数。例如,如果一行有一列是 NaN 的值,但如果该列的数据类型是非数字的,例如 object,则不应将其删除。
【解决方案2】:

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 - 不复制数据框。

【讨论】:

  • 感谢您的回复。但是,似乎此代码将删除所有存在 NaN 的行,但它不考虑数据类型为数字的列,例如浮点数。例如,如果一行有一列是 NaN 的值,但如果该列的数据类型是非数字的,例如 object,则不应将其删除。
猜你喜欢
  • 2017-03-07
  • 2021-06-14
  • 2017-03-20
  • 2018-10-29
  • 1970-01-01
  • 2021-05-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多