python - Pandas 'replace' 如何在 'loc' 之后工作?

标签 python pandas

我已经尝试了很多次,但是在使用“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/

相关文章:

python - 适用于Windows初学者的Python IDE/环境

python - 我如何删除这种类型的黑色图像的背景?

python - 数据透视表排序 pandas

python - 删除 Pandas 中 DateTime 索引的时间部分

python - 如何使用现有的和较新的类微调 keras 模型?

python - 在工作的 IDLE 控制台中获取保留字的提示?

python - 如何以编程方式(python)使用操作系统用户验证用户名/密码

python - 如何向 pandas df 中的分组项目添加标量值

python - Pandas 将计算行添加到数据框的底部

python - Pandas DataFrame 在写入操作后包含 NaN