删除包含 NaN、NaTs 和 nans 的任何列的行

removing rows with any column containing NaN, NaTs, and nans

目前我有以下数据:

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 的符号中获取值,Nat 用于日期,NaN 用于重量。

我的目标:我想删除包含 nan、Nat 或 NaN 的任何列的任何行,并得到一个新的 df_clean 作为结果

我好像无法应用合适的过滤器?我不确定是否必须先转换数据类型(虽然我也试过了)

您可以使用

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

这是因为 isnullNaNNaT 都识别为 "null" 值。

因为,符号'nan' 没有被dropna()isnull() 捕捉到。您需要将符号 'nan' 转换为 np.nan

试试这个:

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