簡體   English   中英

Pandas:從DataFrame中刪除帶有nans,0和NA的所有列

[英]Pandas: dropping all columns with nans, 0, and NA from DataFrame

我有一個看起來像這樣的DataFrame:

import pandas as pd
import numpy as np

df = pd.DataFrame({'A': [1, 2.1, np.nan, 4.7, 5.6, 6.8],
                'B': [0, np.nan, np.nan, 0, 0, 0],
                'C': [0, 0, 0, 0, 0, 0.0],
                'D': [5, 5, 5, 5, 5.6, 6.8],
                'E': ['NA', 'NA', 'NA', 'NA', 'NA', 'NA'],})

我如何刪除列中的所有NANans0 ,以便獲得以下輸出?

df2 = pd.DataFrame({'A': [1, 2.1, np.nan, 4.7, 5.6, 6.8],
                'D': [5, 5, 5, 5, 5.6, 6.8],})

到目前為止,我知道.dropna()將擺脫所有的nan還我試圖df2=df[~(df==0).all(axis=1)]並沒有奏效。

您可以嘗試使用df.isin()all()來查找不包含空值的列數組,然后使用此數組選擇df的相關列:

>>> df[df.columns[(~df.isin([NaN, 'NA', 0])).all().values]]
     A    D
0  1.0  5.0
1  2.1  5.0
2  NaN  5.0
3  4.7  5.0
4  5.6  5.6
5  6.8  6.8

或者更簡潔: df.loc[:, (~df.isin([NaN, 'NA', 0])).all()]

>>> df
     A   B  C    D   E
0  1.0   0  0  5.0  NA
1  2.1 NaN  0  5.0  NA
2  NaN NaN  0  5.0  NA
3  4.7   0  0  5.0  NA
4  5.6   0  0  5.6  NA
5  6.8   0  0  6.8  NA
>>> f = df.replace([0,'NA'], np.nan).apply(lambda x: any(~x.isnull()))
>>> f
A     True
B    False
C    False
D     True
E    False
dtype: bool
>>> df.loc[:,f]
     A    D
0  1.0  5.0
1  2.1  5.0
2  NaN  5.0
3  4.7  5.0
4  5.6  5.6
5  6.8  6.8

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM