gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 18:58:06 24 4
gpt4 key购买 nike

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com