как найти в таблице dataframe фрагмент текста и заменить его на другой текст?

Есть ДатаФрейм:

   BSS Reg  BS_number BS_name        BS_address     CELL
0  NaN  IR        129  IO029  Область Иркутская  IO0291
1  NaN  IR        129  IO029  Область Иркутская  IO0292
2  NaN  IR        129  IO029  Область Иркутская  IO0293
1  NaN  IR        192  IR192  Область Иркутская  IR1921
2  NaN  IR        192  IR192  Область Иркутская  IR1922

Как мне найти фрагменты текста которые начинаются на IO и заменить на IR? Получить пытаюсь такую таблицу:

   BSS Reg  BS_number BS_name        BS_address     CELL
0  NaN  IR        129  IR029  Область Иркутская  IR0291
1  NaN  IR        129  IR029  Область Иркутская  IR0292
2  NaN  IR        129  IR029  Область Иркутская  IR0293
1  NaN  IR        192  IR192  Область Иркутская  IR1921
2  NaN  IR        192  IR192  Область Иркутская  IR1922

желательно по условию, чтобы выводилась таблица такая если есть IO. Потому что IO может и не быть в таблице. следующий код это мои попытки получить такую таблицу:

        '''if ces2gTable["Reg"] != ces2gTable["BS_name"].str[:2]:
            ces2gTable=ces2gTable.drop("BS_name", axis=1)
            print("TRUE")
            #ces2gTable["BS_name"] = ces2gTable["BS_name"].str.replace("IO", "IR") 
        else:
            print("FALSE")'''
        addcol=ces2gTable["BS_name"]
        ces2gTable.insert(6, "RegIO", addcol)
        ces2gTable["RegIO"] = ces2gTable["RegIO"].str[:2]
        if "IO" in ces2gTable["RegIO"]:
            print("TRUE")
        else:
            print("FALSE")
        print(ces2gTable)
        print(ces4gTable)

Ответы (1 шт):

Автор решения: Oopss
import pandas as pd
from io import StringIO

data = '''   BSS Reg  BS_number BS_name        BS_address     CELL
              NaN  IR        129  IO029  "Область Иркутская"  IO0291
              NaN  IR        129  IO029  "Область Иркутская"  IO0292
              NaN  IR        129  IO029  "Область Иркутская"  IO0293
              NaN  IR        130  " X"  "Область Иркутская"  IO0293
              NaN  IR        130  "" "Область Иркутская"  IO0293
              NaN  IR        192  IR192  "Область Иркутская"  IR1921
              NaN  IR        192  IR192  "Область Иркутская"  IR1922'''

df = pd.read_csv(StringIO(data), delim_whitespace=True)
print(df)

df[['BS_name','CELL']] = df[['BS_name','CELL']].replace('^IO', 'IR', regex=True)
print(df)

   BSS Reg  BS_number BS_name         BS_address    CELL
0  NaN  IR        129   IO029  Область Иркутская  IO0291
1  NaN  IR        129   IO029  Область Иркутская  IO0292
2  NaN  IR        129   IO029  Область Иркутская  IO0293
3  NaN  IR        130       X  Область Иркутская  IO0293
4  NaN  IR        130     NaN  Область Иркутская  IO0293
5  NaN  IR        192   IR192  Область Иркутская  IR1921
6  NaN  IR        192   IR192  Область Иркутская  IR1922
   BSS Reg  BS_number BS_name         BS_address    CELL
0  NaN  IR        129   IR029  Область Иркутская  IR0291
1  NaN  IR        129   IR029  Область Иркутская  IR0292
2  NaN  IR        129   IR029  Область Иркутская  IR0293
3  NaN  IR        130       X  Область Иркутская  IR0293
4  NaN  IR        130     NaN  Область Иркутская  IR0293
5  NaN  IR        192   IR192  Область Иркутская  IR1921
6  NaN  IR        192   IR192  Область Иркутская  IR1922


df['BS_name'] = df['BS_name'].str.replace('^IO', 'IR', regex=True)
df['CELL'] = df['CELL'].str.replace('^IO', 'IR', regex=True)
print(df)

   BSS Reg  BS_number BS_name         BS_address    CELL
0  NaN  IR        129   IO029  Область Иркутская  IO0291
1  NaN  IR        129   IO029  Область Иркутская  IO0292
2  NaN  IR        129   IO029  Область Иркутская  IO0293
3  NaN  IR        130       X  Область Иркутская  IO0293
4  NaN  IR        130     NaN  Область Иркутская  IO0293
5  NaN  IR        192   IR192  Область Иркутская  IR1921
6  NaN  IR        192   IR192  Область Иркутская  IR1922
   BSS Reg  BS_number BS_name         BS_address    CELL
0  NaN  IR        129   IR029  Область Иркутская  IR0291
1  NaN  IR        129   IR029  Область Иркутская  IR0292
2  NaN  IR        129   IR029  Область Иркутская  IR0293
3  NaN  IR        130       X  Область Иркутская  IR0293
4  NaN  IR        130     NaN  Область Иркутская  IR0293
5  NaN  IR        192   IR192  Область Иркутская  IR1921
6  NaN  IR        192   IR192  Область Иркутская  IR1922

Чтобы создать датафрейм, использую pandas.read_csv для считывания из файла или буфера, помещаю в буфер строку и считываю read_csv(StringIO(data))

delim_whitespace bool, по умолчанию False Указывает, будут ли пробельные символы (например, ' ' или '\t') использоваться в качестве разделителя sep. Эквивалентно установке sep='\s+'. Если этот параметр установлен в True, то для параметра разделителя ничего не нужно передавать.

Если нужно перенести данные в другую колонку можно это сделать так:

df['DopColumn'] = df['BS_name'].str.replace('^IO', 'IR', regex=True)

BSS Reg  BS_number BS_name         BS_address    CELL DopColumn
0  NaN  IR        129   IO029  Область Иркутская  IO0291     IR029
1  NaN  IR        129   IO029  Область Иркутская  IO0292     IR029
2  NaN  IR        129   IO029  Область Иркутская  IO0293     IR029
3  NaN  IR        130       X  Область Иркутская  IO0293         X
4  NaN  IR        130     NaN  Область Иркутская  IO0293       NaN
5  NaN  IR        192   IR192  Область Иркутская  IR1921     IR192
6  NaN  IR        192   IR192  Область Иркутская  IR1922     IR192
→ Ссылка