【发布时间】:2020-07-17 08:30:50
【问题描述】:
我有一个熊猫系列,可以通过以下代码制作:
输入:
l = ['abcd 1942 Lmauu 40% 70cl',
'something again something 1.5 L',
'some other stuff 45% 70 CL',
'not the exact data 3LTR',
'abcd 100Ltud 6%(8)500ML',
'cdef 6%(8)500 ml',
'a packet 24 x 27.5 cl ( PET )']
ser = pd.Series(l)
问题陈述和预期输出:
我正在尝试从系列中提取卷并转换为数据框,以便卷位于数据框的 1 列中,而度量单位位于另一列中,可以使用以下代码重现预期输出:
d = {0: {0: '70',
1: '1.5',
2: '70',
3: '3',
4: '500',
5: '500',
6: '27.5'},
1: {0: 'cl', 1: 'L', 2: 'CL', 3: 'LTR', 4: 'ML', 5: 'ml', 6: 'cl'}}
expected_output = pd.DataFrame(d)
0 1
0 70 cl
1 1.5 L
2 70 CL
3 3 LTR
4 500 ML
5 500 ml
6 27.5 cl
我的试用代码
这是我尝试过的,我已经非常接近我想要的但并不完全,如果你看到我没有得到最后一卷。我想是因为我在我的正则表达式中包含了$,但没有它我无法解析这个字符串中的音量,例如abcd 1942 Lmauu 40% 70cl,1942 L 将被返回。此外,我希望仅在第二列中使用度量单位,而不是在输出中显示的第一列,但这是次要的。
print(ser.str.extract(r'((?i)([\d]+?[.])?\d+?[\s+]?(cl$|ml$|ltr$|L$)(?:$))').iloc[:,[0,-1]])
0 2
0 70cl cl
1 1.5 L L
2 70 CL CL
3 3LTR LTR
4 500ML ML
5 500 ml ml
6 NaN NaN
请建议我应该在这里做什么。
【问题讨论】: