作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我已经尝试了很多次,但是在使用“loc”之后,“replace”似乎无法正常工作。例如,我想将“conlumn_b”替换为“conlumn_a”值为“apple”的行的正则表达式。
这是我的示例代码:
df.loc[df['conlumn_a'] == 'apple', 'conlumn_b'].replace(r'^11*', 'XXX',inplace=True, regex=True)
例子:
conlumn_a conlumn_b
apple 123
banana 11
apple 11
orange 33
我对“df”的预期结果是:
conlumn_a conlumn_b
apple 123
banana 11
apple XXX
orange 33
有人遇到过这个问题,需要在 'loc' 之后用正则表达式 'replace' 吗?
或者你们还有其他一些好的解决方案?
非常感谢您的帮助!
最佳答案
inplace=True
适用于应用 的对象。
当您调用 .loc
时,您正在对数据框对象进行切片以返回一个新对象。
>>> id(df)
4587248608
还有,
>>> id(df.loc[df['conlumn_a'] == 'apple', 'conlumn_b'])
4767716968
现在,在这个新切片上调用就地 replace
将应用替换操作,更新新切片本身,而不是原始切片。
现在,请注意,您正在 int
的列上调用 replace
,但不会发生任何事情,因为正则表达式有效在字符串上。
以下是我为您提供的解决方法。根本不要使用正则表达式。
m = df['conlumn_a'] == 'apple'
df.loc[m, 'conlumn_b'] = df.loc[m, 'conlumn_b'].replace(11, 'XXX')
df
conlumn_a conlumn_b
0 apple 123
1 banana 11
2 apple XXX
3 orange 33
或者,如果您需要基于正则表达式的替换,那么 -
df.loc[m, 'conlumn_b'] = df.loc[m, 'conlumn_b']\
.astype(str).replace('^11$', 'XXX', regex=True)
尽管如此,这会将您的列转换为对象列。
关于python - Pandas 'replace' 如何在 'loc' 之后工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55823763/
我是一名优秀的程序员,十分优秀!