Python .loc 混淆
Posted
技术标签:
【中文标题】Python .loc 混淆【英文标题】:Python .loc confusion 【发布时间】:2017-12-15 15:16:26 【问题描述】:我正在使用 Datacamp 平台为 Titanic 做一个 Kaggle 教程。
我了解 Pandas 中 .loc 的使用 - 使用列标签按行选择值...
我的困惑来自于在 Datacamp 教程中,我们想要在“Sex”列中找到所有“Male”输入,并将其替换为值 0。他们使用以下代码来做它:
titanic.loc[titanic["Sex"] == "male", "Sex"] = 0
有人可以解释一下这是如何工作的吗?我以为 .loc 接受了行和列的输入,那么 == 是什么意思?
不应该是:
titanic.loc["male", "Sex"] = 0
谢谢!
【问题讨论】:
This answer might be helpful 【参考方案1】:如果条件仅为True
,它将Sex
列设置为1
,其他值不变:
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 indexing
与 loc
非常相似 - 它仅按条件选择列 Sex
的值:
print (titanic.loc[titanic["Sex"] == "male", "Sex"])
0 male
2 male
Name: Sex, dtype: object
但我认为这里最好使用map
,如果只有male
和female
值需要转换为其他值:
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
编辑:
Primary 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
【讨论】:
非常感谢! @fashioncoder - 如果我的回答有帮助,请不要忘记accept 它 - 单击答案旁边的复选标记 (✓
) 将其从灰色切换为已填充。谢谢.以上是关于Python .loc 混淆的主要内容,如果未能解决你的问题,请参考以下文章
混淆矩阵是什么?Python多分类的混淆矩阵计算及可视化(包含原始混淆矩阵及归一化的混淆矩阵):基于skelarn框架iris数据集