这是先前提出并解决的问题的扩展(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方法是否有变化?还是我在这里做错了什么?早些时候,我编写的相同代码有效,但现在不再有效。
答案 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
这只是一个变通办法,因为它将覆盖现有的列,但是在我的情况下它可以工作,因为我的主要目标是用值替换代码。