如何用Pandas处理DataFrame中含省略号的range列并展开数值范围?
解决Pandas DataFrame范围值展开问题
步骤1:创建示例DataFrame
首先我们先还原题目中的输入数据:
import pandas as pd data = { 'Type': ['Mike', 'Ni', 'NANA', 'Gi'], 'range': ['10..13', '3..4', '2...3', '2'] } df = pd.DataFrame(data)
步骤2:拆分范围值并处理边界
使用正则表达式拆分range列,同时处理单值的情况:
# 按任意数量的点拆分,生成start和end列 df[['start', 'end']] = df['range'].str.split(r'\.+', expand=True) # 转换为整数类型,单值行的end填充为start的值 df['start'] = df['start'].astype(int) df['end'] = df['end'].fillna(df['start']).astype(int)
步骤3:生成展开后的数值列表
为每行生成包含完整范围的数值列表:
# 生成从start到end(包含)的整数列表 df['expanded_range'] = df.apply(lambda row: list(range(row['start'], row['end'] + 1)), axis=1)
步骤4:展开列表为多行
使用explode方法将列表拆分为独立行,并清理多余列:
# 展开列表并整理列名 result = df.explode('expanded_range').drop(columns=['range', 'start', 'end']) result = result.rename(columns={'expanded_range': 'range'}) # 重置索引(可选) result = result.reset_index(drop=True)
最终结果
运行上述代码后,result即为所需的展开后DataFrame:
Type range 0 Mike 10 1 Mike 11 2 Mike 12 3 Mike 13 4 Ni 3 5 Ni 4 6 NANA 2 7 NANA 3 8 Gi 2
内容的提问来源于stack exchange,提问作者Greencolor
相关产品推荐
相关产品推荐

