Я пытаюсь заменить значение внутри столбца строки, который находится между двумя конкретными формулировками
Например, из этого фрейма я хочу изменить
df
seller_name url
Lucas http://sanyo.mapi/s3/e42390aac371?item_title=Branded%20boys%20Clothing&seller_name=102392852&buyer_item=106822419_1056424990
К этому
url
http://sanyo.mapi/s3/e42390aac371?item_title=Branded%20boys%20Clothing&seller_name=Lucas&buyer_item=106822419_1056424990
Посмотрите URL-адрес в seller_name=
part я вместо реального имени, я изменил числа для реального имени.
Я представляю себе что-то вроде перехода от seller_name=
к первому и того, что он видит у seller_name
.
это всего лишь пример того, что я хочу сделать, но на самом деле у меня много строк в моей фреймворке, а длина чисел внутри имени продавца не всегда одинакова
Используйте применить и заменить строку именем продавца
Образец df
import pandas as pd
df=pd.DataFrame({'seller_name':['Lucas'],'url':['http://sanyo.mapi/s3/e42390aac371?item_title=Branded%20boys%20Clothing&seller_name=102392852&buyer_item=106822419_1056424990']})
import re
def myfunc(row):
return(re.sub('(seller_name=\d{1,})','seller_name='+row.seller_name,row.url))
df['url']=df.apply(lambda x: myfunc(x),axis=1)
Это решение не принимает порядок ваших параметров запроса или длину идентификатора, который вы заменяете. Все это предполагает, что ваш запрос is &
-delimited, и что у вас есть параметр seller_name
, присутствует.
split_by_amps = url.split('&')
for i in range(len(split_by_amps)):
if (split_by_amps[i].startswith('seller_name')):
split_by_amps[i] += 'seller_name=' + 'Lucas'
break
result = '&'.join(split_by_amps)
seller_name = 'Lucas'
url = 'http://sanyo.mapi/s3/e42390aac371?item_title=Branded%20boys%20Clothing&seller_name=102392852&buyer_item=106822419_1056424990'
a = url.index('seller_name=')
b = url.index('&', a)
out = url.replace(url[a+12:b],seller_name)
print(out)
Попробуй это:
Вы можете использовать регулярные выражения для замены кода для имени:
import pandas as pd
import re
#For example use a dictionary to map codes to names
seller_dic = {102392852:'Lucas'}
for i in range(len(df['url'])):
#very careful with this, if a url doesn't have this structure it will throw
#an error, you may want to handle exceptions
code = re.search(r'seller_name=\d+&',df['url'][i]).group(0)
code = code.replace("seller_name=","")
code = code.replace("&","")
name = 'seller_name=' + seller_dic[code] + '&'
url = re.sub(r'seller_name=\d+&', name, df['url'][i])
df['url'][i] = url
&
в список, а затем взять элемент списка, гдеseller_name
должно заменить код продавца на имя продавца и объединить список обратно в строку? Вы также можете заменить с помощью регулярных выражений stackoverflow.com/questions/11475885/python-replace-regex