有什么区别,或者我应该在 Python 中应用“:” vs “=”?

What's the difference or when should I apply ":" vs "=" in Python?

提问人:neil__r 提问时间:7/1/2023 最后编辑:DataJanitorneil__r 更新时间:7/1/2023 访问量:92

问:

我是该网站的新手,但我一直在了解“”和“”应用程序的区别。:=

我知道“”是一个赋值运算符,就像 一样,所以像 b= 任何 DataFrame,c 可以是......但我正在查看以下代码,不明白为什么他们不使用 “” 而不是使用 “” 来分配 pandas 列的值。我知道它遵循字典结构,但我读到对于字典,值在首次创建时不能重复。因此,在这个 df 创建示例中:=a= 12c= b.copy()=:

n = 100 # Number of registrations
age = np.random.randint(18, 25, n)
gender = np.random.choice(['M', 'F'], n)
math_score = np.random.randint(0, 100, n)
english_score = np.random.randint(0, 100, n)
physics_score = np.random.randint(0, 100, n)
# Compute Average
average_score = (math_score + english_score + physics_score) / 3
# Create dataFrame
data = pd.DataFrame({
'Age': age,
'Gender': gender,
'Math Score': math_score,
'English Score': english_score,
'Physics Score': physics_score,
'Average Score': average_score
})

我无法完全理解这种结构与我读到的东西(HubSpot)之间的匹配,即应该有唯一的值......如果每个值都是随机给出的,则很可能在 100 次中至少有一个值是相同的。但我也觉得很熟悉这种 dataFrame 结构,具有类似字典的结构。然而,我对编程来说比较陌生,这让我感到困惑......

无论如何,我的怀疑也是因为我正在检查 Seaborn Boxplot 的 kwargs,我发现要自定义中位数和平均值可视化,它是这样的(这是我到目前为止所做的并且工作正常,但我不舒服让某些东西工作,但不知道我做了什么......

sns.boxplot(x="Age", data= df, orient ="h", color= "darkblue", medianprops={"color": "red"}, boxprops={"facecolor": (0, 0, 1, .7)},
            showmeans= True, meanprops={"marker": "o", "markerfacecolor": "black", "markeredgecolor": "black", "markersize": "6"})

提前致谢,我知道它很长,而且我很确定它可以用更少的行写成......为此而努力!=)

在这两种情况下,当将“”更改为“”时,例如::=

data = pd.DataFrame({
'Age'= age,
'Gender'= gender,
'Math Score'= math_score,
'English Score'= english_score,
'Physics Score'= physics_score,
'Average Score'= average_score
})

它强调“年龄”、“性别”、“...”、“平均分数”说明:

对于 Age -> SyntaxError:无法在此处分配给文本。也许你的意思是“”而不是“”? 对于“性别”和其余部分 -> 预期的参数名称===

python 赋值运算符

评论

6赞 Barmar 7/1/2023
=用于赋值变量或命名函数参数,用于分隔字典中的键和值。:
0赞 slothrop 7/1/2023
请注意,您可以执行类似操作,但前提是您的列名没有空格:data = pd.DataFrame(dict(age=age, gender=gender))

答:

2赞 juanpethes 7/1/2023 #1

您完全正确地认为,它是传递给构造函数以生成 DataFrame 的字典。但是,字典不能有重复的值是不正确的。它只能有重复的键。所以这是完全允许的pd.DataFrame

{
    "a": 1,
    "b": 1,
}

其中键“a”和“b”都对应于值 1。 但是,这:

{
    "a": 1,
    "a": 2,
}

行不通。或者,它会,但它只会覆盖第一个,给出这个字典:

{
    "a": 2,
}

我们可以多次拥有相同的值但不能拥有相同的键的原因是因为我们只在一个方向上索引到字典中。因此,我们只检索相应的值,如果它给了我们多个值,那就没有意义的了。但是,例如,多个人的年龄是完全可能的,因此多个值不是问题。dct[key]

希望这对:)有所帮助

0赞 Vercingatorix 7/1/2023 #2

=用于为变量赋值。 用于在字典构造中将键与其值分开。键不是变量,因此它不使用 .键是字典中的索引。变量和字典键是相似但截然不同的概念(事实上,你可以获得一个包含你的变量的字典,但我不想混淆你)。:=

字典键是作为字符串传递以获取其值的内容。例如,如果您有字典:[]

d = { 'Age': 33, 'Gender': 'male' }

您可以打印 .(下面是一个包含字典的变量。如果是一个变量,您将拥有:print(d['Age'])dAge

Age = 33

并使用 .请注意,变量不在引号中,字典键文字在引号中。但这允许您这样做:print(Age)

key='Age'
print(d[key])

输出:

33

这不适用于变量*。这允许您以编程方式执行访问值,例如

dict_list = [ f'{k}: {v}' for k,v in d.items()]
print('\n'.join(dict_list))

其输出为:

Age: 33
Gender: male

* 我正在为新手简化事情。有很多方法可以做到这一点,但我们把这些掩盖为高级的、通常是不可取的话题。