替换数据框中单元格中的部分文本

时间:2019-05-03 09:17:42

标签: pandas python-2.7

这是先前提出并解决的问题的扩展(Replace specific values inside a cell without chaging other values in a dataframe

我有一个数据框,其中使用不同的数字代码代替文本字符串,现在我想将这些代码替换为文本值。在参考问题(上面的链接)中,它以前使用过regex方法,但现在不起作用了,对于.replace方法是否有任何更改,我一无所知。

我的数据框示例:

    col1
0   1,2,3
1   1,2
2   2-3
3   2, 3

我编写的代码行使用需要更改的值的字典,然后将正则表达式设置为true。

我使用了以下代码:

d = {'1':'a', '2':'b', '3':'c'}
df['col2'] = df['col1'].replace(d, regex=True)

我得到的结果是:

    col1    col2
0   1,2,3    a,2,3
1   1,2      a,2
2   2-3      b-3
3   2, 3     b, 3

我在期待:

    col1    col2
0   1,2,3    a,b,c
1   1,2      a,b
2   2-3      b-c
3   2, 3     b, c

或者:

    col1
0   a,b,c
1   a,b
2   b-c
3   b, c

过去1年中.replace方法是否有变化?还是我在这里做错了什么?早些时候,我编写的相同代码有效,但现在不再有效。

1 个答案:

答案 0 :(得分:0)

好吧,经过一些实验,我发现对于单元格中的每个代码(数字),我需要有一个正则表达式替换语句,例如:

df.replace({'col1': r'1'}, {'col1': 'a'}, regex=True, inplace=True)
df.replace({'col1': r'2'}, {'col1': 'b'}, regex=True, inplace=True)
df.replace({'col1': r'3'}, {'col1': 'c'}, regex=True, inplace=True)

这将导致:

    col1
0   a,b,c
1   a,b
2   b-c
3   b, c

这只是一个变通办法,因为它将覆盖现有的列,但是在我的情况下它可以工作,因为我的主要目标是用值替换代码。