У меня есть фрейм данных pandas, как показано ниже. Я только хочу, чтобы фрейм данных, содержащий от -P до _p (нижний регистр после этого) и '-', удалить и изменить строку после этого в нижнем регистре.
>>> data= ['AAP','AAPL','BRK-A','AAIC-PB','AAP-C','YAB-PP']
>>> a = pd.DataFrame(data,columns=['code'])
>>> a
code
0 AAP
1 AAPL
2 BRK-A
3 AAIC-PB
4 AAP-C
5 YAB-PP
>>> a['code']=a['code'].str.replace('-P','_p')
>>> a
>>> a
code
0 AAP
1 AAPL
2 BRK-A
3 AAIC_pB
4 AAP-C
5 YAB_pP
>>> a['code']=a['code'].str.replace('-','')
>>> a
code
0 AAP
1 AAPL
2 BRKA
3 AAIC_pB
4 AAPC
5 YAB_pP
>>>
Желаемый результат
code
0 AAP
1 AAPL
2 BRKa
3 AAIC_pb
4 AAPc
5 YAB_pp
Это шаблон для преобразования кода. Если содержит '-', удалите его и преобразуйте строку после tat в нижний регистр. Если содержит '-P', преобразовать в _pи строку после этого преобразовать в нижний регистр.






Вы можете сделать:
import pandas as pd
data= ['AAP','AAPL','BRK-A','AAIC-PB','AAP-C','YAB-PP']
a = pd.DataFrame(data,columns=['code'])
a['code'] = a['code'].str.replace('-(P.*)', lambda x: f'_{x.group(1).lower()}')
a['code'] = a['code'].str.replace('-(\w.*)', lambda x: x.group(1).lower())
print(a)
Выход
code
0 AAP
1 AAPL
2 BRKa
3 AAIC_pb
4 AAPc
5 YAB_pp
ОБНОВЛЯТЬ
В версиях до Python 3.6:
a['code'] = a['code'].str.replace('-(P.*)', lambda x: '_{}'.format(x.group(1).lower()))
a['code'] = a['code'].str.replace('-(\w.*)', lambda x: x.group(1).lower())
print(a)
a['code'] = a['code'].str.replace('-(P.*)', lambda x: f'_{x.group(1).lower()}') вернуться SyntaxError: invalid syntax@bkcollection Какую версию Python вы используете?
Я использую Python 2.7
Пожалуйста, объясните, почему
BRK-AстановитсяBRKa, аYAB-PPстановитсяYAB_pp