如何在 Python 中将多个逗号分隔的列表列同时展开为多行
发布时间 - 2026-01-07 00:00:00 点击率:次本文介绍使用 pandas 的 `str.split()` 和 `explode()` 方法,高效地将 dataframe 中多个字符串型列表列(如 "ms" 和 "ds")按元素一一配对展开为独立行,自动处理长度不等时的缺失值填充(如 `none`)。
在数据分析中,常遇到将含逗号分隔字符串的多列同步“爆炸”(explode)为多行的需求——尤其当各列代表一一对应的属性(如价格与对应天数),但原始数据以字符串形式存储且长度可能不一致。直接使用 zip_longest 易出错,关键在于:先解析字符串为列表,再构造配对元组,最后统一 explode。
以下是推荐的清晰、可复现的解决方案:
import pandas as pd
from itertools import zip_longest
# 示例数据
df = pd.DataFrame({
'ID': [654, 131, 598],
'MS': ['1500,10000,20000,30000', '1500,10000,20000', '1500,10000,20000,30000'],
'DS': ['60,365,730', '60,365,730', '60,365,730']
})
# 步骤 1:将 MS 和 DS 列拆分为列表(注意:split 后元素仍为字符串)
df[['MS', 'DS']] = df[['MS', 'DS']].apply(lambda x: x.str.split(','), axis=1)
# 步骤 2:对每行,用 zip_longest 配对两个列表(短者补 None)
df['paired'] = df.apply(lambda row: list(zip_longest(row['MS'], row['DS'])), axis=1)
# 步骤 3:explode 展开 paired 列,得到每对 (MS_val, DS_val)
df_exploded = df.explode('paired')
# 步骤 4:将元组解包回 MS 和 DS 列
df_exploded[['MS', 'DS']] = pd.DataFrame(df_exploded['paired'].tolist(), index=df_exploded.index)
# 可选:清理中间列,并重置索引
df_final = df_exploded.drop(columns=['paired']).reset_index(drop=True)✅ 输出结果与预期一致:每行 ID 对应一组 MS/DS 值,MS 较长时 DS
自动补 None(注意:fillvalue=None 是 zip_longest 默认行为;若需 'Nan' 字符串,请显式写 fillvalue='Nan')。
⚠️ 注意事项:
- str.split(',') 返回的是字符串列表(如 ['1500', '10000']),后续数值计算前建议用 .astype(float) 或 .astype(int) 转换;
- explode() 要求目标列为 list/tuple 类型,不可直接对字符串列调用;
- 若多列长度差异大且需严格对齐(如笛卡尔积),应改用 merge 或 pd.concat + repeat,而非 zip_longest;
- 性能敏感场景下,避免 apply(..., axis=1),可考虑 pd.Series.explode 配合 map 分步处理。
该方法简洁、健壮,是处理多列同步展开任务的标准实践。
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Laravel如何实现邮件验证激活账户_Laravel内置MustVerifyEmail接口配置【步骤】
如何快速生成凡客建站的专业级图册?
如何在云主机上快速搭建网站?
Android利用动画实现背景逐渐变暗
,在苏州找工作,上哪个网站比较好?
中国移动官方网站首页入口 中国移动官网网页登录
如何用JavaScript实现文本编辑器_光标和选区怎么处理
制作旅游网站html,怎样注册旅游网站?
微信小程序制作网站有哪些,微信小程序需要做网站吗?
Python3.6正式版新特性预览
简单实现Android文件上传
Laravel如何实现本地化和多语言支持_Laravel多语言配置与翻译文件管理
Java类加载基本过程详细介绍
如何注册花生壳免费域名并搭建个人网站?
高防服务器租用首荐平台,企业级优惠套餐快速部署
高防网站服务器:DDoS防御与BGP线路的AI智能防护方案
Windows Hello人脸识别突然无法使用
Laravel如何编写单元测试和功能测试?(PHPUnit示例)
Win11怎样安装网易有道词典_Win11安装词典教程【步骤】
Java遍历集合的三种方式
作用域操作符会触发自动加载吗_php类自动加载机制与::调用【教程】
如何在云虚拟主机上快速搭建个人网站?
Microsoft Edge如何解决网页加载问题 Edge浏览器加载问题修复
公司网站制作需要多少钱,找人做公司网站需要多少钱?
如何在香港免费服务器上快速搭建网站?
Laravel如何实现多对多模型关联?(Eloquent教程)
*服务器网站为何频现安全漏洞?
HTML透明颜色代码怎么让图片透明_给img元素加透明色的技巧【方法】
如何在Ubuntu系统下快速搭建WordPress个人网站?
WEB开发之注册页面验证码倒计时代码的实现
免费视频制作网站,更新又快又好的免费电影网站?
魔毅自助建站系统:模板定制与SEO优化一键生成指南
Laravel怎么实现模型属性的自动加密
WordPress 子目录安装中正确处理脚本路径的完整指南
个人网站制作流程图片大全,个人网站如何注销?
油猴 教程,油猴搜脚本为什么会网页无法显示?
php后缀怎么变mp4格式错误_修改扩展名提示格式不对怎么办【技巧】
Laravel Vite是做什么的_Laravel前端资源打包工具Vite配置与使用
java获取注册ip实例
成都网站制作公司哪家好,四川省职工服务网是做什么用?
Laravel怎么配置.env环境变量_Laravel生产环境敏感数据保护与读取【方法】
Laravel如何将应用部署到生产服务器_Laravel生产环境部署流程
C++用Dijkstra(迪杰斯特拉)算法求最短路径
智能起名网站制作软件有哪些,制作logo的软件?
昵图网官网入口 昵图网素材平台官方入口
phpredis提高消息队列的实时性方法(推荐)
Laravel如何为API编写文档_Laravel API文档生成与维护方法
javascript基本数据类型及类型检测常用方法小结
详解jQuery中的事件
如何在万网自助建站中设置域名及备案?

