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 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

编辑:

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 混淆的主要内容,如果未能解决你的问题,请参考以下文章

在proguard混淆后Android字符串变成随机数

混淆矩阵是什么?Python多分类的混淆矩阵计算及可视化(包含原始混淆矩阵及归一化的混淆矩阵):基于skelarn框架iris数据集

Python 代码混淆和加密技术

Python 代码混淆和不可告人的加密技术!

Python使用pandas的crosstab函数计算混淆矩阵并使用Seaborn可视化混淆矩阵实战

python评分卡之LR及混淆矩阵、ROC