删除包含NaN,NaT和nans的任何列的行

时间:2016-08-24 01:15:46

标签: python pandas dataframe nan

目前我的数据如下:

df_all.head()
Out[2]: 
   Unnamed: 0 Symbol       Date      Close       Weight
0        4061      A 2016-01-13  36.515889   (0.000002)
1        4062     AA 2016-01-14  36.351784    0.000112 
2        4063    AAC 2016-01-15  36.351784   (0.000004)
3        4064    AAL 2016-01-19  36.590483    0.000006 
4        4065   AAMC 2016-01-20  35.934062    0.000002 

df_all.tail()
Out[3]: 
         Unnamed: 0 Symbol Date  Close Weight
1252498    26950320    nan  NaT   9.84    NaN
1252499    26950321    nan  NaT  10.26    NaN
1252500    26950322    nan  NaT   9.99    NaN
1252501    26950323    nan  NaT   9.11    NaN
1252502    26950324    nan  NaT   9.18    NaN

df_all.dtypes
Out[4]: 
Unnamed: 0             int64
Symbol                object
Date          datetime64[ns]
Close                float64
Weight                object
dtype: object

可以看出,我在符号纳米,纳特为日期和NaN的重量值。

我的目标:我想要移除任何包含任何包含nan,Nat或NaN的列并且有一个新的df_clean作为结果的行

我似乎无法应用适当的过滤器?我不确定是否必须首先转换数据类型(尽管我也试过了)

2 个答案:

答案 0 :(得分:4)

您可以使用

df_all.replace({'nan': None})[~pd.isnull(df_all).any(axis=1)]

这是因为isnull同时将NaNNaT识别为" null"值。

答案 1 :(得分:0)

因此,nan'dropna()未捕获符号“isnull()”。您需要将符号'nan'转换为np.nan

试试这个:

 df["symbol"] = np.where(df["symbol"]=='nan',np.nan, df["symbol"] )
 df.dropna()