删除包含 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)]
这是因为 isnull
将 NaN
和 NaT
都识别为 "null" 值。
因为,符号'nan'
没有被dropna()
或isnull()
捕捉到。您需要将符号 'nan'
转换为 np.nan
试试这个:
df["symbol"] = np.where(df["symbol"]=='nan',np.nan, df["symbol"] )
df.dropna()
目前我有以下数据:
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)]
这是因为 isnull
将 NaN
和 NaT
都识别为 "null" 值。
因为,符号'nan'
没有被dropna()
或isnull()
捕捉到。您需要将符号 'nan'
转换为 np.nan
试试这个:
df["symbol"] = np.where(df["symbol"]=='nan',np.nan, df["symbol"] )
df.dropna()