Как обновить значения ячеек pandas на основе starts with

#python #pandas #loops

#python #pandas #циклы

Вопрос:

У меня есть фрейм данных в качестве:

 a = {'TXI':  ['TXI|GS|-4.08|ABCD', 'TXI|TX|0', 'TXI|SP|7.06|ABCD']}
a = pd.DataFrame (a, columns = ['TXI']) 
  

Я пытаюсь удалить последние 5 символов на основе starts with, чтобы получить результат, подобный b:

 b = {'TXI':  ['TXI|GS|-4.08', 'TXI|TX|0', 'TXI|SP|7.06']}
b = pd.DataFrame (b, columns = ['TXI'])
  

Приведенный ниже код не обновляет фрейм данных. Где не так?

 for i in a.TXI:
    if not i.startswith('TXI|TX'):
        i = i[:-5]
  

Комментарии:

1. просто замените этим кодом a.TXI = i[:-5], внутри условия if

Ответ №1:

вы можете сделать это с помощью assign и apply:

 a = a.assign(TXI = lambda x: x['TXI'].apply(lambda s: s[:-5] if s.startswith('TXI|TX') else s ))
  

результатом будет:

                  TXI
0  TXI|GS|-4.08|ABCD
1                TXI
2   TXI|SP|7.06|ABCD
  

Ответ №2:

Пожалуйста, используйте where функцию введите описание изображения здесь

 a.TXI.where(a.TXI.str.startswith('TXI|TX'), a.TXI.str[:-5])

0    TXI|GS|-4.08
1        TXI|TX|0
2     TXI|SP|7.06