Используйте replace
, примененные только для отфильтрованных значений по mask
:
df['keyword_2'] = df['keyword'].mask(df['keyword'] != 'transfer',
df['keyword'].str.replace('transfer', '').str.strip())
print (df)
id keyword keyword_2
0 1 transfer transfer
1 2 atm transfer atm
2 3 atm atm
3 4 ulta transfer ulta
Другое решение без полоски, но с join
и split
:
print (df)
id keyword
0 1 transfer
1 2 atm transfer
2 3 atm
3 4 ulta transfer v
df['keyword_2'] = [' '.join(y for y in x.split() if y != 'transfer')
if x != 'transfer' else x for x in df['keyword']]
print (df)
id keyword keyword_2
0 1 transfer transfer
1 2 atm transfer atm
2 3 atm atm
3 4 ulta transfer v ulta v
Вам необходимо преобразовать ваш сценарий в функцию оболочки:
#!/bin/bash
#
# this script should not be run directly,
# instead you need to source it from your .bashrc,
# by adding this line:
# . ~/bin/myprog.sh
#
function myprog() {
A=$1
B=$2
echo "aaa ${A} bbb ${B} ccc"
cd /proc
}
Причина в том, что каждый процесс имеет свой собственный текущий каталог, и когда вы выполняете программу из оболочки, она запускается в новый процесс. Стандартные «cd», «pushd» и «popd» встроены в интерпретатор оболочки, так что они влияют на процесс оболочки.
Делая свою программу функцией оболочки, вы добавляете свою собственную команду внутри процесса, а затем любую изменение каталога отражается в процессе оболочки.
С помощью pushd текущий каталог помещается в стек каталогов и изменяется на данный каталог, popd получает каталог поверх стек, а затем изменяет его.
pushd ../new/dir > /dev/null
# do something in ../new/dir
popd > /dev/null
Когда вы запускаете сценарий, создается новый процесс, который наследует только ваше окружение. Когда это заканчивается, это заканчивается. Ваше текущее окружение останется прежним.
Вместо этого, вы можете запустить свой скрипт так:
. myscript.sh
The .
будет оценивать сценарий в текущей среде, поэтому он может быть изменен
В свете нечитаемости и чрезмерного усложнения ответов, я считаю, что это то, что должен сделать запрашивающий
ПУТЬ
]. имя сценария
.
(точка) гарантирует, что сценарий не запускается в дочерней оболочке.
Если вы используете bash, вы можете попробовать alias:
в файле .bashrc добавить эту строку:
alias p='cd /home/serdar/my_new_folder/path/'
когда вы напишете «p» в командной строке, каталог изменится.
Объединив все вышесказанное, вы можете создать псевдоним
alias your_cmd=". your_cmd"
, если вы не хотите писать в начале "." каждый раз вы хотите передать свой скрипт в среду оболочки, или если вы просто не хотите помнить, что нужно сделать для корректной работы скрипта.