Название может немного отличаться. Я объясню это как следует. Я получаю DataFrame df
с неожиданным форматом одного из столбцов с именем marker
.
Иногда я получаю marker
, смешанный из одного marker
или диапазона marker
:
marker place1 place2
45 PQR STU
145.0-100 ABC DEF
267.0-175.8 GHI KLM
Во время преобразования мне нужно разделить marker
, который содержит -
, и он станет таким:
marker firstkm lastkm place1 place2
45 45 NaN PQR STU
145.0-100 145.0 100 ABC DEF
267.0-175.8 267.0 175.8 GHI KLM
Я также могу получить следующий DataFrame, где все marker
- это не диапазон.
marker place1 place2
145.0 ABC DEF
267.0 GHI KLM
С помощью этого фрагмента кода:
#Split marker to temporary dataframe , split_m
split_m = df.marker.str.split('-', expand=True)
split_m.columns=['firstkm', 'lastkm'] #hitting error here
split_m = split_km[['firstkm', 'lastkm']].replace([None], np.nan)
я могу достичь желаемого результата, если DataFrame будет похож на первый пример, который я показал выше. Однако я не могу добиться результата, если DataFrame похож на второй показанный мной пример. Я получаю сообщение об ошибке:
ValueError: Несоответствие длины: ожидаемая ось имеет 1 элемент, новые значения имеют 2 элемента
Я понимаю, что ошибка вызвана невозможностью DataFrame поставить любое значение в lastkm
. Но я не знаю, как с этим справиться ..
Если я напечатаю split_m
для второго DataFrame, я получу следующее:
marker firstkm
145.0 145.0
267.0 267.0
Как я могу назначить np.nan
сразу на lastkm
, чтобы получить следующий результат:
marker firstkm lastkm
145.0 145.0 NaN
267.0 267.0 NaN
EDIT
Другой шаблон, с которым я сталкиваюсь:
marker firstkm lastkm place1 place2
45 45 NaN PQR STU
145.0-100 145.0 100 ABC DEF
267.0-175.8 267.0 175.8 GHI KLM
18.1J 18.1J Nan GHI KLM
P7.991-54.3 P7.991 54.3 GHI KLM
UPM Ex 0.5 UPM Ex 0.5 NaN PPP SSS
UPMEx0.5
все еще приемлемо. Без учета регистра.