Pandas替换值

16

我有以下数据框:

     col
0    pre
1    post
2    a
3    b
4    post
5    pre
6    pre

我想把数据框中所有不包含“pre”的行替换为“nonpre”,使得数据框看起来像:

     col
0    pre
1    nonpre
2    nonpre
3    nonpre
4    nonpre
5    pre
6    pre

我可以使用字典和Pandas的替换函数来完成,但我只想选择不是'pre'的元素并用'nonpre'替换它们。有没有更好的方法可以做到这一点,而不必在字典中列出所有可能的列值?

2个回答

27
只要您熟悉pandas所允许的df.loc[condition, column]语法,这非常容易做到,只需执行df['col'] != 'pre'即可找到所有应该更改的行:
df['col2'] = df['col']
df.loc[df['col'] != 'pre', 'col2'] = 'nonpre'

df
Out[7]: 
    col    col2
0   pre     pre
1  post  nonpre
2     a  nonpre
3     b  nonpre
4  post  nonpre
5   pre     pre
6   pre     pre

谢谢!使用 .loc 有什么问题我需要注意吗? - user308827
1
不,.loc 是你想要访问数据框中特定行和列时应该首先尝试的方法。不确定你是否有使用 R 的经验,但它与使用 R 数据框进行子集操作的语法非常相似。 - Marius

6
df[df['col'].apply(lambda x: 'pre' not in x)] = 'nonpre'

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接