Python如何获取两数间所有整数 展开DataFrame区间格式列
Pandas展开单元格内整数区间为整数列表
实现思路
- 编写通用值处理函数,兼容单元格内三类值格式:单个整数、单区间、逗号分隔的多区间
- 将处理函数批量应用到DataFrame所有单元格,完成格式转换
完整代码
import pandas as pd # 构造测试DataFrame df = pd.DataFrame({ 'code1': [34261, '[32413-32417]'], 'code2': ['[54642-54646]', '[23541-23546, 42156-42158]'] }) # 定义区间展开核心函数 def expand_range(cell_val): # 单元格本身为整数时直接返回 if isinstance(cell_val, int): return cell_val res_list = [] # 移除首尾方括号,按逗号拆分多个区间段 range_segments = cell_val.strip('[]').split(',') for seg in range_segments: seg = seg.strip() start, end = map(int, seg.split('-')) # 生成包含首尾值的连续整数,追加到结果列表 res_list.extend(range(start, end + 1)) return res_list # 批量处理所有单元格 # pandas 2.1.0以下版本使用applymap df = df.applymap(expand_range) # pandas 2.1.0及以上版本替换为下方写法即可 # df = df.map(expand_range)
运行结果
处理后得到的DataFrame完全匹配需求结构:
code1 code2 0 34261 [54642, 54643, 54644, 54645, 54646] 1 [32413, 32414, 32415, 32416, 32417] [23541, 23542, 23543, 23544, 23545, 23546, 42156, 42157, 42158]
注:需求示例中第一个code2区间开头重复写了两次54642属于笔误,实际连续区间会从54642逐次递增到54646。
内容的提问来源于stack exchange,提问作者Shubham Korade
相关产品推荐
相关产品推荐

