Заменить определенное значение между двумя конкретными словами

1

Я пытаюсь заменить значение внутри столбца строки, который находится между двумя конкретными формулировками

Например, из этого фрейма я хочу изменить

 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.

это всего лишь пример того, что я хочу сделать, но на самом деле у меня много строк в моей фреймворке, а длина чисел внутри имени продавца не всегда одинакова

  • 0
    Разве вы не можете разделить строку на & в список, а затем взять элемент списка, где seller_name должно заменить код продавца на имя продавца и объединить список обратно в строку? Вы также можете заменить с помощью регулярных выражений stackoverflow.com/questions/11475885/python-replace-regex
Теги:
string
dataframe
python-3.x

4 ответа

1
Лучший ответ

Используйте применить и заменить строку именем продавца

Образец 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)
0

Это решение не принимает порядок ваших параметров запроса или длину идентификатора, который вы заменяете. Все это предполагает, что ваш запрос 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)
0
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)

Попробуй это:

  • 0
    ОП имеет дело с пандами, а не с основным питоном. Это не поможет ОП в любом случае
0

Вы можете использовать регулярные выражения для замены кода для имени:

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню