为什么这段代码将某些值转换回 Nan?

问题描述

我有一个数据框“cars”,有一列“price”。最初,它有 4 个空值。使用:

cars = cars.dropna(subset=['price'])

删除了那些行。然后我创建了一个新的数据框 numeric_cars,其中只有数字数据。此时的价格仍然没有空值。但是,当我尝试对这个新数据框中除价格外的所有值进行标准化时,返回 4 个空值。我意识到我可以再次放弃它们,但为什么会发生这种情况?这是规范化代码

numeric_cars['price'].isnull().sum() #Output 0
from sklearn import preprocessing
price_col = numeric_cars['price'].copy()
x = numeric_cars.values #returns a numpy array
min_max_scaler = preprocessing.MinMaxScaler()
x_scaled = min_max_scaler.fit_transform(x)
numeric_cars = pd.DataFrame(x_scaled,columns = numeric_cols)
numeric_cars['price'] = price_col
numeric_cars['price'].isnull().sum() #Output 4

解决方法

min_max_scaler 将通过执行 x = (x - min) / (max - min) 来转换该数据。

您确定没有任何具有常量值的列吗?即最小=最大?也许它正在除以 0 并生成 NaN。