如何在Python Pandas DataFrame中标准化部分列并替换原数据?
嘿,我来帮你搞定这两个问题,咱们一步步来:
问题1:如何在Python Pandas DataFrame中对部分列进行标准化?
对DataFrame的部分列做标准化其实很简单,核心思路是只选中需要标准化的列,用StandardScaler处理后再放回原DataFrame,具体步骤如下:
- 先导入依赖库:
pandas和sklearn.preprocessing.StandardScaler - 从DataFrame中筛选出需要标准化的目标列
- 用
StandardScaler拟合并转换这些列(转换后会得到numpy数组) - 将转换后的结果赋值回原DataFrame的对应列,保留其他不需要处理的列
问题2:将标准化后的数组替换回原DataFrame的对应列
你之前的代码问题在于直接把整个df替换成了转换后的numpy数组,导致丢失了id、item这些不需要标准化的列。咱们修改一下代码,既能完成标准化,又能保留原DataFrame的完整结构:
首先,先还原你的原始DataFrame(方便测试):
import pandas as pd from sklearn.preprocessing import StandardScaler # 构建原始数据 data = { 'id': [1, 2, 3, 4, 5], 'cost': [300, 3, 1, 5, 2], 'sales': [50, 88, 70, 80, 999], 'item': ['pen', 'bottle', 'drink', 'cup', 'ink'] } df = pd.DataFrame(data)
然后执行标准化并替换列:
# 初始化标准化器 scaler = StandardScaler() # 对指定列进行拟合+转换,得到标准化后的数组 scaled_data = scaler.fit_transform(df[['cost', 'sales']]) # 把标准化后的数据赋值回原DataFrame的对应列 df[['cost', 'sales']] = scaled_data
执行完这段代码后,你查看df就会发现:id和item列完全保留,cost和sales列已经替换成了你得到的标准化数组值。
额外小贴士
如果之后你需要用同一个标准化规则处理其他数据(比如测试集),建议分开fit和transform步骤,这样能保证均值和标准差的一致性:
# 先在训练数据上拟合标准化器 scaler.fit(df[['cost', 'sales']]) # 转换训练数据 df[['cost', 'sales']] = scaler.transform(df[['cost', 'sales']]) # 后续处理测试集时直接用同一个scaler转换 # test_df[['cost', 'sales']] = scaler.transform(test_df[['cost', 'sales']])
内容的提问来源于stack exchange,提问作者BigData
相关产品推荐
相关产品推荐

