Pandas DataFrame转数组后np.min返回NaN的原因咨询
Pandas DataFrame转数组后np.min返回NaN的原因
问题场景
我有一个Pandas DataFrame,想要删除一列后将剩余数据用于统计测试。执行以下代码时:
X = dtf_scaled_train.drop('y_train_scaled', axis=1) print(np.min(X))
得到各列的最小值:
OverallQual -2.500000 GrLivArea -1.721519 GarageCars -2.000000 GarageArea -1.892216 TotalBsmtSF -1.972084 FullBath -2.000000 YearBuilt -2.108696 YearRemodAdd -1.189189 LotFrontage -2.333333 MSSubClass -0.600000 MSSubClass_cluster_mean -1.000000 MSSubClass_cluster_min 0.000000 dtype: float64
这符合预期,但将其转为数组后调用np.min:
X = dtf_scaled_train.drop('y_train_scaled', axis=1).values print(np.min(X))
却返回:
nan
原因分析
- 核心原因是你的DataFrame中存在缺失值(NaN)。
- 直接对Pandas DataFrame调用
np.min()时,Pandas会自动忽略各列的NaN值,计算每列的最小值;但将DataFrame转为NumPy数组后,np.min()默认不会跳过NaN,只要数组中存在一个NaN,就会直接返回NaN。 - 解决方法:
- 转数组后调用
np.min(X, skipna=True),指定跳过NaN值计算全局最小值; - 先处理DataFrame中的缺失值(比如用
df.fillna()填充合适的值),再转为数组进行计算。
- 转数组后调用
内容的提问来源于stack exchange,提问作者GeoMonkey
相关产品推荐
相关产品推荐

