Заменить определенное значение между двумя конкретными словами - PullRequest
0 голосов
/ 25 сентября 2018

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

Например, с этого кадра данных я хочу изменить

 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=, которую я заменил на настоящее имя, я изменил числа для настоящего имени.

Я представляю что-то вроде перехода с seller_name= на первый и что он видит с seller_name.

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

Ответы [ 4 ]

0 голосов
/ 25 сентября 2018

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

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
0 голосов
/ 25 сентября 2018

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

Образец 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 голосов
/ 25 сентября 2018

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

Попробуйте:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...