如何拆分存储单/多值混合数据的列,实现每条仅含单一值
多值列拆分方案
以下是不同工具场景下的实现方法:
Excel/WPS 表格操作
- 选中
Name列,依次点击顶部菜单栏「数据」-「分列」,分隔符选择「逗号」,完成后得到多列拆分后的Name值 - 全表进入Power Query编辑器(Excel:数据>从表格/区域;WPS:数据>表格转换>PowerQuery编辑器)
- 按住Ctrl选中所有拆分后的Name列,右键选择「逆透视列」,即可得到单行单值的结果,其余列数据会自动关联匹配
- 退出编辑器并将结果加载回表格即可
Python Pandas 实现
直接调用split+explode方法即可完成拆分,示例代码如下:
import pandas as pd # 读取你的数据,下方为示例构造数据 df = pd.DataFrame({ "Name": ["A", "B,A", "c", "D,G"], "New Name": ["A", "B", "A", "C"] }) # 拆分多值列并展开为单行单值 df["Name"] = df["Name"].str.split(",") df = df.explode("Name", ignore_index=True) # 处理后结果可直接导出为csv/excel格式 print(df)
运行后得到的处理结果如下:
| Name | New Name |
|---|---|
| A | A |
| B | B |
| A | B |
| c | A |
| D | C |
| G | C |
SQL 实现(适配MySQL8.0+、PostgreSQL等支持递归CTE的数据库)
WITH RECURSIVE split_result AS ( SELECT -- 截取第一个分隔值 SUBSTRING_INDEX(Name, ',', 1) AS Name, `New Name`, -- 剩余未拆分的内容 SUBSTRING(Name, LENGTH(SUBSTRING_INDEX(Name, ',', 1)) + 2) AS rest_content FROM 你的表名 UNION ALL SELECT SUBSTRING_INDEX(rest_content, ',', 1) AS Name, `New Name`, SUBSTRING(rest_content, LENGTH(SUBSTRING_INDEX(rest_content, ',', 1)) + 2) AS rest_content FROM split_result WHERE rest_content != '' ) SELECT Name, `New Name` FROM split_result;
内容的提问来源于stack exchange,提问作者user8155912
相关产品推荐
相关产品推荐

