求助:如何用Pandas将输入数据转为目标格式?(已尝试归一化无效)
解决方案
核心思路
通过Pandas的wide_to_long函数实现宽表转长表,将带序号的重复特征列(如A1/A2/A3、B1/B2/B3)转换为统一列名的多行结构,再按需完成归一化处理。
步骤代码
- 导入依赖并读取数据
import pandas as pd from sklearn.preprocessing import MinMaxScaler # 读取输入数据(假设为CSV格式) df = pd.read_csv("input_data.csv") # 若数据无样本唯一标识列,手动添加ID df["ID"] = df.index + 1
- 格式转换(关键步骤)
# 将带序号的特征列转换为目标长表格式 df_transformed = pd.wide_to_long( df, stubnames=["A", "B"], # 特征列的前缀名称 i="ID", # 保留的样本标识列 j="seq", # 生成的临时序号列(可后续删除) sep="" # 列名中前缀与序号的分隔符(此处为空) ).reset_index(drop=False).drop("seq", axis=1)
- 归一化处理
若此前归一化未达预期,建议先对同组特征列统一归一化,再执行格式转换:
# 对A系列特征列做归一化 df[["A1", "A2", "A3"]] = MinMaxScaler().fit_transform(df[["A1", "A2", "A3"]]) # 对B系列特征列做归一化 df[["B1", "B2", "B3"]] = MinMaxScaler().fit_transform(df[["B1", "B2", "B3"]]) # 再执行上述格式转换代码
- 保存结果
df_transformed.to_csv("output_data.csv", index=False)
补充说明
- 若你的特征列命名规则不同(如
A_1、B_2),需将sep参数设为对应的分隔符(如sep="_")。 - 若不需要保留
ID列,可在reset_index后添加.drop("ID", axis=1)删除。
内容的提问来源于stack exchange,提问作者krishna
相关产品推荐
相关产品推荐

