为什么在Pandas中使用“==”返回一个序列而不是bool?

2024-10-01 00:25:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我就是不明白第二行“==”是什么意思:
-这不是测试,没有if语句…
-它不是一个变量声明

我以前从未见过这个,事情是data.ctage==cat是一个熊猫系列,而不是一个测试

for cat in data["categ"].unique():
    subset = data[data.categ == cat] # Création du sous-échantillon
    print("-"*20)
    print('Catégorie : ' + cat)
    print("moyenne:\n",subset['montant'].mean())
    print("mediane:\n",subset['montant'].median())
    print("mode:\n",subset['montant'].mode())
    print("VAR:\n",subset['montant'].var())
    print("EC:\n",subset['montant'].std())
    plt.figure(figsize=(5,5))
    subset["montant"].hist(bins=30) # Crée l'histogramme
    plt.show() # Affiche l'histogramme

Tags: 声明dataifmodeplt语句事情cat
3条回答

它正在测试data.categ的每个元素是否与cat相等。生成真/假值向量的。这作为索引器传递给data[],它从data返回对应于向量中真值的行

总之,整个表达式返回来自data的行子集,其中data.categ的值等于cat

(似乎可以使用data.groupBy('categ').apply(someFunc)更优雅地完成整个操作。)

是的,这是一个测试。布尔表达式仅限于if语句

看起来好像data是一个数据帧(PANDAS)。用作数据帧索引的表达式表示选择器或筛选器。这意味着选择fieledcateg与变量cat(显然是预定义变量)匹配的每一行。这个行集合将成为一个新的数据帧subset

它创建一个带有索引的布尔序列,其中data.categ等于cat,使用此布尔掩码,您可以过滤数据帧,换句话说subset将具有所有记录,其中categ是存储在cat中的值

这是一个使用数字数据的示例

np.random.seed(0)
a = np.random.choice(np.arange(2), 5)
b = np.random.choice(np.arange(2), 5)
df = pd.DataFrame(dict(a = a, b = b))


df[df.a == 0].head()

#   a   b
# 0 0   0
# 2 0   0
# 4 0   1

df[df.a == df.b].head()

#   a   b
# 0 0   0
# 2 0   0
# 3 1   1

相关问题 更多 >