У меня есть DataFrame, в котором один столбец представляет собой строки строк, которые выглядят так:
Received value 126;AOC;H3498XX from 602
Received value 101;KYL;0IMMM0432 from 229
Я хочу удалить (или ничем не заменить) часть после второй точки с запятой, чтобы она выглядела как
Received value 126;AOC; from 602
Но эта часть, которую я хочу отбросить, будет иметь различную и непредсказуемую длину (всегда комбинации AZ и 0-9). Точки с запятой и froms всегда будут там для справки.
Я пытаюсь использовать регулярное выражение, изучая эту ссылку: https://docs.python.org/3/library/re.html
import re
for row in df[‘column’]:
row = re.sub(‘;[A-Z0-9] from’ , ‘; from’, row)
Я думаю, что [A-Z0-9] не в состоянии включить аспект различной длины, который я хочу.
Пример использования str.replace()
с str.split()
:
s = ['126;AOC;H3498XX from 602', '101;KYL;0IMMM0432 from 229']
for elem in s:
print(elem.replace(elem.split(";",2)[-1].split()[0],''))
ВЫХОД:
126;AOC; from 602
101;KYL; from 229
РЕДАКТИРОВАТЬ:
То же самое будет работать и со следующим примером:
s = ['Received value 126;AOC;H3498XX from 602', 'Received value 101;KYL;0IMMM0432 from 229']
for elem in s:
print(elem.replace(elem.split(";",2)[-1].split()[0],''))
ВЫХОД:
Received value 126;AOC; from 602
Received value 101;KYL; from 229
Это отлично работает, когда я использую print(), но я хочу, чтобы вывод оставался в столбце моего фрейма данных. Когда я пытаюсь использовать elem в s: s['column'] = elem.replace.... это не дает ожидаемого результата. Знаете ли вы, как сохранить вывод в столбце этого фрейма данных?
@ЭрикН. вы можете перебрать нужные строки и заменить значения: stackoverflow.com/questions/25478528/…
Используйте шаблон (Received value \d+;[A-Z]+;)\w+(\s.*?)
Бывший:
import re
s = ["Received value 126;AOC;H3498XX from 602", "Received value 101;KYL;0IMMM0432 from 229"]
for i in s:
print( re.sub(r"(Received value \d+;[A-Z]+;)\w+(\s.*?)", r"\1", i) )
Выход:
Received value 126;AOC;from 602
Received value 101;KYL;from 229
print(s.replace(s.split(";",2)[-1].split()[0],''))
?