熊猫-根据子集中的数据类型选择列

时间:2020-10-11 02:39:49

标签: python pandas

在Pandas的数据框中,一些数字列,例如float;有些是非数字的,例如对象。我们要删除那些数字列为NaN的行,而不是那些非数字列为NaN的行。

例如,对于具有四列的df: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

我的步骤是:

  1. 检查哪些列的数据类型为数字,例如Float:我们获得“ B”和“ D”列,因为它们的数据类型为Float;
  2. 使用子集通过dropna方法在数字列中删除包含NaN的行。

以下是代码:

df = penguins.dropna(0, how='any', subset=['B','D'])

但是,如果数字列的数量非常大,则此代码将非常长,有时几乎是不可能的。

那么如何根据subset = []中的数据类型选择这些列?

我正在考虑使用lambda和管道,但我不太确定。

非常感谢!

2 个答案:

答案 0 :(得分:1)

您可以像这样使用select_dtypes

df[df.select_dtypes(include='number').notna().all(axis=1)]

输出:

        A    B        C    D
1  Orange  2.0      NaN  3.0
2  Banana  4.0  String2  5.0
3     NaN  1.0  String3  2.0

答案 1 :(得分:0)

尝试一下:

df = df[df['B'].notna()]
df = df[df['D'].notna()]
相关问题