Уведомления

Группа в Telegram: @pythonsu

#1 Авг. 17, 2021 09:03:01

Provi
Зарегистрирован: 2021-04-09
Сообщения: 32
Репутация: +  0  -
Профиль   Отправить e-mail  

str.replace как правильно написать

Попробовал

Прикреплённый файлы:
attachment 2021-08-17_13-00-44.png (8,4 KБ)

Офлайн

#2 Авг. 17, 2021 09:05:00

Provi
Зарегистрирован: 2021-04-09
Сообщения: 32
Репутация: +  0  -
Профиль   Отправить e-mail  

str.replace как правильно написать

Пробовал так:

import re
#X = xls.copy().head(2)
# Y = X['number'].to_string()
#for row in X:
# Y = X.to_string()
# y_n = (''.join(re.split('"[a-zA-Z0-9]+"', Y))) #"[a-zA-Z0-9]+"
# return y_n
# X['number'] = y_n
X
и Так:
  
import re

text = xls['number'].copy().head(2)
text = text.to_string()
pat = r' "[a-zA-Z0-9]+"'
rep = 'DD'

out = re.sub(pat, rep, text)

X['number'] = out
X

Не помогает. чего то я не понимаю.

Офлайн

#3 Авг. 17, 2021 12:34:10

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9873
Репутация: +  853  -
Профиль   Отправить e-mail  

str.replace как правильно написать

Provi
Попробовал
Прикреплённый файлы:
attachment 2021-08-17_13-00-44.png (8,4 KБ)
Provi
Не помогает. чего то я не понимаю.
Так это же не кавычки, а скобки.

Для скобок будет так
  
>>> import re
>>> 
>>> text = 'abc def (ghi) jkl(lmn) opq'
>>> pat = r' \([^)]+\)'
>>> rep = 'X'
>>> 
>>> out = re.sub(pat, rep, text)
>>> 
>>> text
'abc def (ghi) jkl(lmn) opq'
>>> out
'abc defX jkl(lmn) opq'
>>>



Офлайн

#4 Авг. 17, 2021 12:52:11

Provi
Зарегистрирован: 2021-04-09
Сообщения: 32
Репутация: +  0  -
Профиль   Отправить e-mail  

str.replace как правильно написать

py.user.next
О спасибо.
Почти получилось, а можно тогда еще вопрос)

  
import re

text = xls['number'].copy().head(5)
text = text.to_string()
pat = r'\([^)]+\)'
rep = ''

out = re.sub(pat, rep, texts)

xls['number'] = out

xls
Я жду, что он у меня в каждую ячейку запишет обновленное значение, а он в каждую ячейку пишет одно и то же значение, и при этом все значения которые получились в дата сете.
Т.е. номер в первой ячейке приобрел вид:
1 1 Альфа \n2 12-009…
2 1 Альфа \n2 12-009…
3 1 Альфа \n2 12-009…
4 1 Альфа \n2 12-009…
5 1 Альфа \n2 12-009…
Как сделать, что бы он просто записывал обновленное значение?
И я правильно понимаю, если у меня нужно заменить пробел который идет перед скобками, то нужно просто добавить в код пробел перед скобкой?

Офлайн

#5 Авг. 17, 2021 22:51:31

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9873
Репутация: +  853  -
Профиль   Отправить e-mail  

str.replace как правильно написать

Provi
Я жду, что он у меня в каждую ячейку запишет обновленное значение, а он в каждую ячейку пишет одно и то же значение, и при этом все значения которые получились в дата сете.
Нужно полный код выложить. Где-то там ошибка.
Алгоритмически это надо делать так: ты должен брать каждую строку, проделывать с ней все замены и заканчивать с ней работу. И так повторять итеративно этот процесс с каждой строкой от начала до конца. То есть ты открываешь файл, потом при открытом файле проводишь эту кучу итераций со строками, а потом закрываешь файл. Строки не должны знать друг про друга. Они - как острова. Что происходит на одном острове, должно быть неизвестно на другом острове. А у тебя где-то эти острова сцеплены в одну территорию, и поэтому они уже не острова.

Provi
И я правильно понимаю, если у меня нужно заменить пробел который идет перед скобками, то нужно просто добавить в код пробел перед скобкой?
Не, я думаю, что скобка тоже сотрётся. Поэтому скобку тебе надо оставить. Чтобы оставить что-то, нужно использовать группы.
Через группы можно что-то оставить, что-то повторить, что-то переместить в другое место в строке.
Пример
  
>>> import re
>>> 
>>> text = 'abc (def) ghi'
>>> pat = r'(\()([^)]+)(\))'
>>> rep = r'\g<1>\g<1>\g<2> \g<2> \g<2>\g<3>\g<3>'
>>> 
>>> out = re.sub(pat, rep, text)
>>> 
>>> text
'abc (def) ghi'
>>> out
'abc ((def def def)) ghi'
>>>



Отредактировано py.user.next (Авг. 17, 2021 22:55:28)

Офлайн

#6 Авг. 19, 2021 06:39:15

Provi
Зарегистрирован: 2021-04-09
Сообщения: 32
Репутация: +  0  -
Профиль   Отправить e-mail  

str.replace как правильно написать

Спасибо всем за помощь с обработкой регулярных выражений.

У меня на входе есть дата фрейм. несколько столбцов и строк. Пример 2 строк во вложении.

Как мне в строку text, передать сначала первую ячейку, первой строки, обработка есть , а потом вернуть назад.
А потом так же поступить с каждой последующей строкой?

Прикреплённый файлы:
attachment 2021-08-17_13-00-44.png (8,4 KБ)

Офлайн

#7 Авг. 19, 2021 13:06:59

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9873
Репутация: +  853  -
Профиль   Отправить e-mail  

str.replace как правильно написать

Provi
У меня на входе есть дата фрейм. несколько столбцов и строк. Пример 2 строк во вложении.

Как мне в строку text, передать сначала первую ячейку, первой строки, обработка есть , а потом вернуть назад.
А потом так же поступить с каждой последующей строкой?
Переведи pandas-данные в данные питона полностью, потом с ними работай. А потом вернёшь обратно данные питона в pandas-данные. Если не умеешь пользоваться pandas'ом, лучше от него отвязываться. Он только затормозит твою работу и преимуществ не даст. Соответственно, ты сначала один раз так обработаешь всё без pandas'а, второй раз обработаешь всё без pandas'а, а потом уже задумаешься “а нахер мне вообще этот pandas нужен? чтобы с Excel'я просто данные грузить? это можно делать и другим способом”.



Офлайн

#8 Авг. 19, 2021 13:42:01

Provi
Зарегистрирован: 2021-04-09
Сообщения: 32
Репутация: +  0  -
Профиль   Отправить e-mail  

str.replace как правильно написать

а можно примерный код как туда обратно данные сгонять?)
я это пытаюсь сделать так:

X = xls['number'].copy().head(5)
text = X.to_string()
pat = r'(\()([^)]+)(\))'
rep = r''
out = re.sub(pat, rep, text)

X['number'] = out

но он мне переводит в строку сразу весь массив. А мне нужно только первую ячейку.
Пытался через цикл, но тоже не сильно помогло.

Офлайн

#9 Авг. 19, 2021 16:31:57

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9873
Репутация: +  853  -
Профиль   Отправить e-mail  

str.replace как правильно написать

Provi
а можно примерный код как туда обратно данные сгонять?)
Перевёл pandas-данные в словарь питона, поработал со словарём питона, перевёл словарь питона в pandas-данные.
  
>>> import pandas as pd
>>> 
>>> df = pd.DataFrame(data=[{'a': 1, 'b': 2, 'c': 3}], index=range(3))
>>> df
   a  b  c
0  1  2  3
1  1  2  3
2  1  2  3
>>> 
>>> import json
>>> 
>>> dct = json.loads(df.to_json())
>>> dct
{'a': {'0': 1, '1': 1, '2': 1}, 'b': {'0': 2, '1': 2, '2': 2}, 'c': {'0': 3, '1': 3, '2': 3}}
>>> 
>>> dct['c']['0'] *= 2
>>> dct
{'a': {'0': 1, '1': 1, '2': 1}, 'b': {'0': 2, '1': 2, '2': 2}, 'c': {'0': 6, '1': 3, '2': 3}}
>>> 
>>> out = pd.DataFrame(dct)
>>> out
   a  b  c
0  1  2  6
1  1  2  3
2  1  2  3
>>>
В промежутке используется модуль json для того, чтобы данные из типа numpy перевести в тип питона. Там бывают nan'ы и прочие вещи. В json'е nan'ы становятся null'ами, а потом из null'ов они превращаются в None'ы.


tags: pandas convert



Отредактировано py.user.next (Авг. 26, 2021 17:30:28)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version