scikit-learn StandardScaler()部分返回NaN

时间:2018-11-14 18:44:46

标签: python pandas scikit-learn

在将preprocessing.StandardScaler()应用于Pandas DataFrame时,我遇到了问题。

df['total_price'].describe()

返回

count    24895.000000
mean       216.377369
std        161.246931
min          0.000000
25%        109.900000
50%        174.000000
75%        273.000000
max       1355.900000
Name: total_price, dtype: float64

奇怪的是,我跑步后

x = df[['total_price']]
standard_scaler = preprocessing.StandardScaler()
x_scaled = standard_scaler.fit_transform(x)
df['new_col'] = pd.DataFrame(x_scaled)   

我的新列中的标准化值还包含NaN:

df[['total_price', 'new_col']].head()

    total_price new_col
0   241.95      0.158596
1   241.95      0.158596
2   241.95      0.158596
3   81.95      -0.833691
4   81.95      -0.833691

df[['total_price', 'new_col']].tail()

        total_price new_col
28167   264.0       NaN
28168   264.0       NaN
28176   94.0        NaN
28177   166.0       NaN
28178   166.0       NaN

这是怎么了?

1 个答案:

答案 0 :(得分:1)

数据框中的索引存在间隙:

28167 
28168  
28176  
28177  
28178

当您调用 pd.DataFrame(x_scaled) 时,您正在创建一个新的连续索引,因此在将其作为原始数据框中的列进行分配时,许多行将不匹配。您可以通过重置原始数据帧中的索引 (df.reset_index()) 或通过就地更新 x (x.update(x_scaled)) 来解决此问题。