Привет, у меня есть данные, как показано ниже, для которых мне нужно сопоставить число, за которым следует его единица, и вернуть только число
У меня есть такие единицы, как, мл, галлон, л и т. Д.
Ввод:
text
1234567-CAR WA GK5 9x78x90 12L
3456789 TOP-L BD3 195x169x62 TopL
Ожидаемый вывод:
text extract Return
1234567-CAR WA GK5 9x78x90 12L 12L 12
3456789 TOP-L BD3 195x169x62 TopL - -
код:
def names(header):
if re.search('([0-9]+(\.[0-9]*|)(\s|[a-z]*)(\s|[a-z]*)(\s|)ml)',header):
pos_start = re.search('([0-9]+(\.[0-9]*|)(\s|[a-z]*)(\s|[a-z]*)(\s|)ml)', header).start()
pos_end = re.search('([0-9]+(\.[0-9]*|)(\s|[a-z]*)(\s|[a-z]*)(\s|)ml)', header).end()
return header[pos_start:pos_end]
elif re.search('((\d*)l)',header):
pos_start = re.search('((\d*)l)', header).start()
pos_end = re.search('((\d*)l)', header).end()
return header[pos_start:pos_end]
def measure(val):
ml=['ml','ML','mL','Ml']
l=['l','L','Lt','lt']
if any(x in val for x in ml):
return float(re.findall('(\d+\.\d+|\d+)', val)[0])
if any(x in val for x in l):
return float(re.findall('(\d+\.\d+|\d+)', val)[0])*1000
df_result = pd.concat([df['A'],df['text'],df['B'],df['text'].apply(names),(df['text'].apply(names)).dropna().apply(measure)],axis=1)
Ошибка:
---> 22 return float(re.findall('(\d+\.\d+|\d+)', val)[0])*1000
IndexError: list index out of range