Удалите ненужные str в фрейме данных Pandas

#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 этом .