2014-11-25 132 views
12

我有以下数据框:熊猫替换值

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

我想,以取代在数据帧的所有行不包含“预”,成为“nonpre”,所以数据帧的样子:

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

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

回答

21

只要你舒服的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 
+0

的感谢!使用.loc有什么问题我应该警惕吗? – user308827 2014-11-25 02:49:07

+1

不,''.loc'基本上是你想要获得数据框中特定行和列集合时应该首先尝试的。不确定您是否具有R的经验,但它与R数据框的子集化语法非常类似。 – Marius 2014-11-25 02:51:39

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