根据列表替换子字符串

时间:2019-12-11 04:43:43

标签: pandas replace

我正在尝试用列表“名称”和“引理”替换数据框中的子字符串。只要我手动输入列表,代码就会在数据帧m中传递结果。

name=['Charge','charge','Prepaid']
lemma=['Hallo','hallo','Hi']

m=sdf.replace(regex= name, value =lemma)

一旦我从excel文件中读取了两个列表,我的代码就不再替换子字符串了。我需要使用一个excel文件,因为列表在一个很大的表中。

sdf= pd.read_excel('training_data.xlsx')
synonyms= pd.read_excel('synonyms.xlsx')

lemma=synonyms['lemma'].tolist() 
name=synonyms['name'].tolist()

m=sdf.replace(regex= name, value =lemma)

感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

df.replace()

用值替换to_replace中给出的值。

DataFrame的值动态地替换为其他值。这与使用.loc或.iloc进行更新不同,后者需要您指定要使用某些值进行更新的位置。

简而言之,该方法不会在序列级别上进行更改,而只会在值上进行更改。

这可以实现您想要的:

sdf.regex = synonyms.name
sdf.value = synonyms.lemma

答案 1 :(得分:0)

如果您只是想将“ Charge”替换为“ Hallo”,将“ charge”替换为“ hallo”,将“ Prepaid”替换为“ Hi”,则可以使用repalce()并将单词列表传递给find作为第一个参数,要替换为的单词列表作为第二个关键字参数value

尝试一下:

df=df.replace(name, value=lemma)

示例:

name=['Charge','charge','Prepaid']
lemma=['Hallo','hallo','Hi']

df = pd.DataFrame([['Bob', 'Charge', 'E333', 'B442'],
              ['Karen', 'V434', 'Prepaid', 'B442'],
              ['Jill', 'V434', 'E333', 'charge'],
              ['Hank', 'Charge', 'E333', 'B442']],
             columns=['Name', 'ID_First', 'ID_Second', 'ID_Third'])

df=df.replace(name, value=lemma)
print(df)

输出:

    Name ID_First ID_Second ID_Third
0    Bob    Hallo      E333     B442
1  Karen     V434        Hi     B442
2   Jill     V434      E333    hallo
3   Hank    Hallo      E333     B442