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

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

Я пытаюсь отбросить последние 5 символов в зависимости от начала, чтобы получить результат типа 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
Leo Yang 9 Окт 2020 в 19:35

2 ответа

Лучший ответ

Вы можете сделать это с помощью 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
0
Mehdi Golzadeh 9 Окт 2020 в 16:52

Пожалуйста, используйте функцию 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
0
Hyuck Kang 9 Окт 2020 в 17:22