我在用python学习课程时无法理解一段代码

时间:2019-07-18 13:23:13

标签: python pandas jupyter-notebook

sum_of_dice = die.sample(2, replace=True).sum().loc[0]

这是用于查找两个掷在一起的骰子的面之和的代码。在这段代码中,我不了解loc[0]在做什么

代码正在运行。但我想知道.loc[0]在这段代码中的作用:

import pandas as pd
die = pd.DataFrame([1, 2, 3, 4, 5, 6])
sum_of_dice = die.sample(2, replace=True).sum().loc[0]
print('Sum of dice is', sum_of_dice)

4 个答案:

答案 0 :(得分:0)

以下是有关Pandas loc属性如何工作的简要概述https://www.geeksforgeeks.org/python-pandas-dataframe-loc/

答案 1 :(得分:0)

Loc似乎是某种列表。表示它存储(或可以存储)多个值。 该代码只希望访问索引0(即起始索引)处的值。

答案 2 :(得分:0)

Pandas loc indexer可以与DataFrames一起用于两种不同的用例:

a)通过标签/索引选择行

b)选择具有布尔/条件查找的行

有关更多信息,请通过:

https://www.shanelynn.ie/select-pandas-dataframe-rows-and-columns-using-iloc-loc-and-ix/#loc-selection

答案 3 :(得分:0)

由于die被定义为pandas.DataFrame,因此它本质上是二维的。

die = pd.DataFrame([1, 2, 3, 4, 5, 6])
die

   0
0  1
1  2
2  3
3  4
4  5
5  6

pandas.DataFrame.sample 将返回另一个二维的pandas.DataFrame

roll = die.sample(2, replace=True)
roll

   0
1  2
4  5

默认情况下,当我们pandas.DataFrame.sum时,我们对每一列求和并返回一个pandas.Series,其中pandas.Series的索引是我们求和的pandas.DataFrame的列对象

roll.sum()

0    7
dtype: int64

这是一个带有一个值的pandas.Series。如果只需要第一个值,则可以使用loc[0]

roll.sum().loc[0]

7

我会做什么

使用pandas.Series定义die

import pandas as pd
die = pd.Series([1, 2, 3, 4, 5, 6])
sum_of_dice = die.sample(2, replace=True).sum()
print('Sum of dice is', sum_of_dice)

在这种情况下,die是一维pandas.Series,因此die.sample(2, replace=True)也是一维的。因此,幸运的是,pandas.Series的总和就是一个标量……这就是我们想要的。无需使用loc。而且,创建pandas.DataFrame比创建pandas.Series花费的精力要少得多。另外,调用loc也有一些开销。总而言之,我们保存2 pandas.DataFrames的创建(一个来自pd.Series而不是pd.DataFrame,两个来自die.sample的创建,后者创建另一个pandas.Series而不是另一个{{ 1}}),我们为自己节省了pandas.DataFrame的通话。