2017-07-11 140 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