如何用双分隔符拆分数据集Value列?拆分后列表合并问题求助
提取"Value"列中的数值解决方案
你的数据格式为130 [23 - 40.2],包含整数、小数和负数,用正则表达式可以一次性提取所有目标数值,比多次拆分更高效可靠。
方法1:提取所有数值到列表
import pandas as pd import re # 假设prob是你的目标DataFrame prob["Extracted_Values"] = prob["Value"].apply(lambda s: [float(num) for num in re.findall(r'-?\d+\.?\d*', s)]) print(prob["Extracted_Values"])
运行后,每个单元格的数值会被提取为数值型列表,比如130 [23 - 40.2]会转化为[130.0, 23.0, -40.2]。
方法2:拆分到单独列
如果需要将每个数值分配到独立列(如主值、范围下限、范围上限),可以用以下代码:
# 提取所有数值并展开为列 extracted_cols = prob["Value"].str.findall(r'-?\d+\.?\d*').apply(pd.Series) # 给新列命名 extracted_cols.columns = ["Main_Value", "Range_Lower", "Range_Upper"] # 合并到原DataFrame prob = pd.concat([prob, extracted_cols], axis=1) print(prob)
执行后原DataFrame会新增三列,分别对应示例中的130、23、-40.2。
原代码的问题说明
你写的x.str.split("[")[0]是取整个Series拆分后的第一个元素,而非每个单元格拆分后的第一部分。正确的单部分提取写法应为x.str.split("[").str[0],但这种方式只能提取第一个数值,无法处理括号内的范围值,因此正则表达式是更优解。
内容的提问来源于stack exchange,提问作者George
相关产品推荐
相关产品推荐

