2017-07-11 102 views
3

我正在使用Datacamp平台为泰坦尼克号制作Kaggle教程。Python .loc混淆

我的理解中熊猫使用的.loc的 - 使用列标签来选择由行值...

我的困惑来自于在Datacamp教程中,我们要查找所有的“男”的事实“欲望”列中输入,并与值0。他们使用的下面这段代码做替换:

titanic.loc[titanic["Sex"] == "male", "Sex"] = 0 

能有人请解释这是如何工作?我以为.loc接受了行和列的输入,那么==为什么呢?

它不应该是:

titanic.loc["male", "Sex"] = 0 

谢谢!

+3

[**此答案可能有帮助**](https://stackoverflow.com/a/44891687/2336654) – piRSquared

回答

2

它集列Sex1如果条件True只,另一个值不变:

titanic["Sex"] == "male" 

样品:

titanic = pd.DataFrame({'Sex':['male','female', 'male']}) 
print (titanic) 
     Sex 
0 male 
1 female 
2 male 

print (titanic["Sex"] == "male") 
0  True 
1 False 
2  True 
Name: Sex, dtype: bool 

titanic.loc[titanic["Sex"] == "male", "Sex"] = 0 
print (titanic) 

0  0 
1 female 
2  0 

它是boolean indexingloc非常相似 - 它仅选择值列Sex由条件:

print (titanic.loc[titanic["Sex"] == "male", "Sex"]) 
0 male 
2 male 
Name: Sex, dtype: object 

但是我觉得这里更好的使用map如果只malefemale值需要转换为一些其他值:

titanic = pd.DataFrame({'Sex':['male','female', 'male']}) 
titanic["Sex"] = titanic["Sex"].map({'male':0, 'female':1}) 
print (titanic) 
    Sex 
0 0 
1 1 
2 0 

编辑:

主要loc用于通过索引和列设置新的价值:

titanic = pd.DataFrame({'Sex':['male','female', 'male']}, index=['a','b','c']) 
print (titanic) 
     Sex 
a male 
b female 
c male 

titanic.loc["a", "Sex"] = 0 
print (titanic) 
     Sex 
a  0 
b female 
c male 

titanic.loc[["a", "b"], "Sex"] = 0 
print (titanic) 
    Sex 
a  0 
b  0 
c male 
+1

非常丰富! +1 –

+0

非常感谢! – fashioncoder

+0

@fashioncoder - 如果我的回答很有帮助,请不要忘记[接受](http://meta.stackexchange.com/a/5235/295067) - 点击答案旁边的复选标记('✓')从灰色切换到填充。谢谢。 – jezrael