Я пытаюсь разрезать столбец pandas под названием PATH из DataFrame, называемый dframe, чтобы я получил имя файла контейнера ad1 с расширением в новом столбце AD1position.Нарезка столбца pandas на основе позиции соответствующей подстроки
PATH
0 \
1 \abc.ad1\xaxaxa
2 \defghij.ad1\wbcbcb
3 \tuvwxyz.ad1\ydeded
Другими словами, вот что я хочу видеть:
PATH AD1position
0 \
1 \abc.ad1\xaxaxa abc.ad1
2 \defghij.ad1\wbcbcb defghij.ad1
3 \tuvwxyz.ad1\ydeded tuvwxyz.ad1
Если бы я должен был сделать это в Excel, я хотел бы написать:
=if(iserror(search(".ad1",[PATH])),"",mid([PATH],2,search(".ad1",[PATH]) + 3))
В Python, я, кажется, застрять. Вот что я писал до сих пор:
dframe['AD1position'] = dframe['PATH'].apply(lambda x: x['PATH'].str[1:(x['PATH'].str.find('.ad1')) \
+ 3] if x['PATH'].str.find('.ad1') != -1 else "")
Выполнение этого возвращает следующее сообщение об ошибке:
TypeError: string indices must be integers
Я подозреваю, что проблема вызвана функцией в ломтерезки, но я бы признателен за любую помощь выясняя, как это решить.
Это был лучший ответ. Он ответил, что я также обновил свои панды до 18.1, чтобы я мог использовать аргумент expand. Похоже, ваша функция охватывает возможность того, что PATH будет «\ aaa \ axy.ad1 \ bbbbb», но я не уверен, что он будет обрабатывать такие значения, как «\ byz.ad1» (т. Е. Без \ в конце) или «\ def.ad1.ad1 \ ccccc» (т. е. повторение расширений в имени файла), но я думаю, что мне должно быть хорошо отсюда. – Xavier
@ Xavier, вы правы - я исправил свой ответ, пожалуйста, проверьте – MaxU