首页 > 解决方案 > 如何从熊猫字符串列中正确提取数字符号

问题描述

我有一个带有 field_names 和 valid_values (范围)的 data_dict 熊猫数据框。我想将有效值转换为 lower_limit 和 upper_limit。

字段名称 有效值 下限 上限
变量1 0-9990 0 9990
变量2 -9990-9999990 -9990 9999990
变量 3 -999999990-999999990 -999999990 999999990
变量4 0-999999990 0 999999990

下面的代码正确提取了上限,但错过了下限的负号

data_dict.valid_values.str.extractall(r'(\d+)').unstack()

下面的代码正确提取了上限,但错过了下限的负号

下面的代码适用于下限,但将“-”添加到上限

data_dict.valid_values.str.extractall(r'([+-]\d+)').unstack()

请建议如何正确提取下限和上限。谢谢你。

标签: pythonpandas

解决方案


如果始终为正,您可以按 last 拆分值-Series.str.rsplitupper_limit

cols = ['lower_limit','upper_limit']
data_dict[cols] = data_dict.valid_values.str.rsplit('-', expand=True, n=1)
print (data_dict)
  field_names          valid_values lower_limit upper_limit
0        Var1                0-9990           0        9990
1        Var2         -9990-9999990       -9990     9999990
2        Var3  -999999990-999999990  -999999990   999999990
3        Var4           0-999999990           0   999999990

推荐阅读