Python新手:数据挖掘场景下如何简单实现指定数据集转换?
实现方法:用Pandas快速转换
作为Python新手,用Pandas库就能非常简便地完成这个转换——这是数据处理领域最常用的工具,处理这类宽表转换简直是拿手好戏。
步骤1:整理原始数据
首先我们需要把你的原始数据拆分成「每个采购记录对应的商品列表」。结合你给出的目标数据集,假设原始数据对应3个采购记录,商品分别是:
- 记录1:
milk, egg, sausage, butter - 记录2:
water, egg - 记录3:
egg, sugar, cake, water
我们先把这些数据组织成列表形式:
# 原始采购记录:每个子列表是一个采购单的商品 purchase_records = [ ["milk", "egg", "sausage", "butter"], ["water", "egg"], ["egg", "sugar", "cake", "water"] ]
步骤2:用Pandas生成目标格式
接下来用Pandas的get_dummies和concat方法快速生成二进制矩阵,再调整格式匹配你的需求:
import pandas as pd # 1. 将每个采购记录转为Series,标记已购买的商品为1 series_list = [] for idx, items in enumerate(purchase_records, start=1): # 商品名作为索引,值设为1表示已购买 s = pd.Series(1, index=items, name=idx) series_list.append(s) # 2. 合并所有采购记录,缺失值填充为0(表示未购买) df = pd.concat(series_list, axis=1).fillna(0).T # 3. 将0/1转换为TRUE/FALSE,添加记录ID列 df = df.astype(bool).reset_index().rename(columns={"index": "ID"}) # 4. 调整列顺序和目标完全一致(可选) target_columns = ["milk", "egg", "sausage", "butter", "sugar", "cake", "water"] df = df[["ID"] + target_columns] # 输出结果 print(df)
运行代码后,你会得到和目标几乎一致的输出:
ID milk egg sausage butter sugar cake water 0 1 True True True True False False False 1 2 False True False False False False True 2 3 False True False False True True True
关键步骤解释
pd.Series(1, index=items):把每个采购单的商品作为索引,值设为1,明确标记该商品被购买。pd.concat(...):把所有采购单的Series合并成宽表,缺失的位置自动填充NaN,我们用fillna(0)把未购买的商品标记为0。.astype(bool):将0/1转换成布尔值(False/True),完美匹配你要的目标格式。
如果原始数据是长字符串怎么办?
如果你的原始数据是未拆分的字符串,比如:
raw_data = "PurchaseLine01 milk egg sausage butter PurchaseLine02 water egg PurchaseLine03 egg sugar cake water"
可以先拆分字符串提取采购记录:
# 按采购行标记分割字符串 parts = raw_data.split("PurchaseLine")[1:] # 提取每个采购记录的商品 purchase_records = [] for part in parts: # 去掉开头的行号,剩下的就是商品列表 items = part.strip().split()[1:] purchase_records.append(items) # 之后就可以用上面的Pandas代码处理了
这样不管原始数据是列表还是字符串,都能快速转换成你需要的目标格式。
内容的提问来源于stack exchange,提问作者Krukiou
相关产品推荐
相关产品推荐

