在将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
这是怎么了?
答案 0 :(得分:1)
数据框中的索引存在间隙:
28167
28168
28176
28177
28178
当您调用 pd.DataFrame(x_scaled)
时,您正在创建一个新的连续索引,因此在将其作为原始数据框中的列进行分配时,许多行将不匹配。您可以通过重置原始数据帧中的索引 (df.reset_index()
) 或通过就地更新 x
(x.update(x_scaled)
) 来解决此问题。