Pandas:用另一个字符串替换字符串

28

我有以下数据框:

    prod_type
0   responsive
1   responsive
2   respon
3   r
4   respon
5   r
6   responsive

我希望将responr替换为responsive,以便最终数据框如下:

    prod_type
0   responsive
1   responsive
2   responsive
3   responsive
4   responsive
5   responsive
6   responsive

我尝试了以下方法,但是没有起作用:

df['prod_type'] = df['prod_type'].replace({'respon' : 'responsvie'}, regex=True)
df['prod_type'] = df['prod_type'].replace({'r' : 'responsive'}, regex=True)
5个回答

37

使用字典通过replace解决方案:

df['prod_type'] = df['prod_type'].replace({'respon':'responsive', 'r':'responsive'})
print (df)
    prod_type
0  responsive
1  responsive
2  responsive
3  responsive
4  responsive
5  responsive
6  responsive

如果需要将列中的所有值设置为某个 字符串

df['prod_type'] = 'responsive' 

5

您不需要在这里传递regex=True,因为这将寻找部分匹配,而您正在寻找精确匹配,只需将参数作为单独的参数传递即可:

In [7]:
df['prod_type'] = df['prod_type'].replace('respon' ,'responsvie')
df['prod_type'] = df['prod_type'].replace('r', 'responsive')
df

Out[7]:
    prod_type
0  responsive
1  responsive
2  responsvie
3  responsive
4  responsvie
5  responsive
6  responsive

3

如果df['prod_type']中所有项目都相同,则可以使用其他解决方案:

df['prod_type'] = ['responsive' for item in df['prod_type']]
In[0]: df
Out[0]:
prod_type
0  responsive
1  responsive
2  responsive
3  responsive
4  responsive
5  responsive
6  responsive

2

跟进jezrael的回答,你可以设置inplace=True来改变数据框:

df = pd.DataFrame(
    {'prod_type':['responsive','responsive','respon','r','respon','r','responsive']},
    columns=['prod_type'])

df.replace({'prod_type': {'respon': 'responsive', 'r': 'responsive'}}, inplace=True)
df
    prod_type
0  responsive
1  responsive
2  responsive
3  responsive
4  responsive
5  responsive
6  responsive


2

另外,您还可以使用具有lambda语法的apply函数。

df['prod_type'] = df['prod_type'].apply(lambda x: x.replace('respon', 'responsvie'))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接