Ric*_*rdo 8 python string replace dataframe pandas
replace在使用Pandas 函数交换列的两个值时,我偶然发现了Pandas 函数的奇怪且不一致的行为.当我用它来交换列中的整数时
df = pd.DataFrame({'A': [0, 1]})
df.A.replace({0: 1, 1: 0})
Run Code Online (Sandbox Code Playgroud)
这产生了结果:
df
A
1
0
Run Code Online (Sandbox Code Playgroud)
但是,对字符串值使用相同的命令时
df = pd.DataFrame({'B': ['a', 'b']})
df.B.replace({'a': 'b', 'b': 'a'})
Run Code Online (Sandbox Code Playgroud)
我们得到了
df
B
'a'
'a'
Run Code Online (Sandbox Code Playgroud)
任何人都可以解释我这种行为上的差异,或者指向我在文档中的一个页面,它处理在熊猫中使用整数和字符串时的不一致性?
是的,这绝对是一个错误,所以我打开了一个新发行版GH20656。
熊猫似乎先后应用替代品。它先进行替换,将“ a”替换为“ b”,然后进行第二次替换,将两个“ b”替换为“ a”。
总而言之,您所看到的等同于
df.B.replace('a', 'b').replace('b', 'a')
0 a
1 a
Name: B, dtype: object
Run Code Online (Sandbox Code Playgroud)
绝对不是应该发生的事情。
有一种str.replace与lambda回调一起使用的解决方法。
m = {'a': 'b', 'b': 'a'}
df.B.str.replace('|'.join(m.keys()), lambda x: m[x.group()])
0 b
1 a
Name: B, dtype: object
Run Code Online (Sandbox Code Playgroud)