如何使用Pandas扩展含字母的CSV数值区间为单行单值格式
区间展开Pandas实现方案
实现逻辑
- 用正则提取区间首尾的前缀(开头非数字字符)、中间数值段、后缀(结尾非数字字符)
- 生成数值范围内的所有整数,拼接原有前后缀得到单条值
- 用Pandas的
explode方法将列表值展开为多行
完整代码
import pandas as pd import re def expand_range(range_str): # 拆分区间起始和结束值 start_str, end_str = range_str.split('-') # 正则匹配前缀、数字部分、后缀 start_match = re.match(r'^(\D*)(\d+)(\D*)$', start_str) end_match = re.match(r'^(\D*)(\d+)(\D*)$', end_str) if not start_match or not end_match: raise ValueError(f"不支持的区间格式: {range_str}") prefix = start_match.group(1) suffix = start_match.group(3) # 校验同一区间前后缀一致,避免处理错误 if prefix != end_match.group(1) or suffix != end_match.group(3): raise ValueError(f"区间前后格式不一致: {range_str}") start_num = int(start_match.group(2)) end_num = int(end_match.group(2)) # 生成区间内所有值 return [f"{prefix}{num}{suffix}" for num in range(start_num, end_num + 1)] # 读取CSV文件,替换为你的实际文件路径 df = pd.read_csv('input.csv') # 生成展开后的值列 df['Value'] = df['Range'].apply(expand_range) # 将列表类型的值展开为独立行 df_expanded = df.explode('Value', ignore_index=True) # 调整输出列顺序 df_result = df_expanded[['Value', 'Category']] # 打印测试,需要导出CSV就取消注释下行,替换为你的输出路径 print(df_result) # df_result.to_csv('output.csv', index=False)
适配说明
代码完全覆盖要求的场景:长度为1的区间、带前后缀的字母数值混合格式,运行你给出的示例数据可直接得到期望输出结果。
内容的提问来源于stack exchange,提问作者E. Camus
相关产品推荐
相关产品推荐

