如何在Pandas DataFrame中拆分字符串格式的数值范围与单个值
Pandas DataFrame数值范围拆分实现
原始数据
Type range Mike 10..13|7|8| Ni 3..4 NANA 2|1|6
期望输出
Type range Mike 10 Mike 11 Mike 12 Mike 13 Mike 7 Mike 8 Nico 3 Nico 4 NANA 2 NANA 1 NANA 6
注:原始输入中Type为Ni,期望输出显示为Nico,若需批量修改Type值可单独添加代码处理,以下实现保留原始Type字段值。
解决方案代码
import pandas as pd # 构造原始DataFrame df = pd.DataFrame({ 'Type': ['Mike', 'Ni', 'NANA'], 'range': ['10..13|7|8|', '3..4', '2|1|6'] }) def expand_range(s): # 清理末尾多余的竖线,拆分每个数值片段 s_clean = s.rstrip('|') segments = s_clean.split('|') num_list = [] for seg in segments: if '..' in seg: # 解析连续范围,生成整数序列 start, end = map(int, seg.split('..')) num_list.extend(range(start, end + 1)) else: # 单个数值直接转换 num_list.append(int(seg)) return num_list # 应用函数生成数值列表,再拆分为多行 df['range'] = df['range'].apply(expand_range) result_df = df.explode('range', ignore_index=True) print(result_df)
代码说明
- 自定义处理函数:
expand_range负责解析每个range字符串,清理无效字符后,区分连续范围和单个数值,将其转换为完整的数值列表。 - 列转换:用
apply将每个range字段转换为对应的数值列表。 - 拆分多行:使用
explode方法将列表中的每个数值拆分为单独一行,同时重置索引保证结果整洁。
内容的提问来源于stack exchange,提问作者Greencolor
相关产品推荐
相关产品推荐

