#python #regex #pandas
Вопрос:
«Я читаю csv-файл с помощью panda read_csv, который содержит данные,
Id;LibId;1;mod;modId;28;Index=10, Step=0, data=d720983f0000c0bf0000000014ae47bf0fe7c23ad1de3039;
Id;LibId;1;mod;modId;4;f9e9003e;
.
.
.
.
В последнем столбце я хочу удалить индекс, Шаг, данные= и хочу сохранить часть шестнадцатеричного значения.
Я создал список с нежелательными значениями и использовал регулярное выражение, но, похоже, ничего не работает.
to_remove = ['Index','Step','data=']
rex = '[' re.escape (''. join (to_remove )) ']'
output_csv['Column_name'].str.replace(rex , '', regex=True)
Комментарии:
1. Попробуй
to_remove = ['Index','Step','data=']
, а потомoutput_csv['Column_name'] = output_csv['Column_name'].str.replace('|'.join([re.escape(x) for x in to_remove]), '', regex=True)
2. работает как волшебство, большое вам спасибо
Ответ №1:
Я предлагаю вам исправить свой код с помощью
to_remove = ['Index','Step','data=']
output_csv['Column_name'] = output_csv['Column_name'].str.replace('|'.join([re.escape(x) for x in to_remove]), '', regex=True)
'|'.join([re.escape(x) for x in to_remove])
Часть создаст подобное регулярное Index|Step|data=
выражение и будет соответствовать любой из to_remove
подстрок.
Ответ №2:
Ввод (добавлено имя столбцов для справки, можно избежать):
col1;col2;col3;col4;col5;col6;col7
Id;LibId;1;mod;modId;28;Index=10, Step=0, data=d720983f0000c0bf0000000014ae47bf0fe7c23ad1de3039
Id;LibId;1;mod;modId;28;Index=10, Step=0, data=d7203ad1de3039
Id;LibId;1;mod;modId;28;Index=10, Step=0, data=d720e47bf0fe7c23ad1de3039
Код:
import pandas as pd
df = pd.read_csv(r"check.csv", sep=";")
df["col7"].replace(regex=True, to_replace="(Index=)(.*)(data=)", value="", inplace=True)
Это позволит извлечь только шестнадцатеричное значение из части «данные» и удалить все остальное. Не забывайте об inplace=True
этом .