как найти в таблице 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 шт):
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