在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
我的步骤是:
以下是代码:
df = penguins.dropna(0, how='any', subset=['B','D'])
但是,如果数字列的数量非常大,则此代码将非常长,有时几乎是不可能的。
那么如何根据subset = []中的数据类型选择这些列?
我正在考虑使用lambda和管道,但我不太确定。
非常感谢!
答案 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()]