如何让 df.loc 从数据帧的特定单元格返回值(数字)?

Posted

技术标签:

【中文标题】如何让 df.loc 从数据帧的特定单元格返回值(数字)?【英文标题】:How to get df.loc to just return the value (number) from a specific cell of a dataframe? 【发布时间】:2019-09-03 18:48:38 【问题描述】:

我正在处理有关大学篮球队获得 2 分和 3 分的频率的数据。我计划将它们取 3 的频率乘以 3,并将其添加到取 2 乘以 2 的频率上。一个函数将执行此操作。该函数稍后将被放入一个更大的函数中,但这不应该引起任何限制(我不认为)。

这里是 pandas 数据集的前 10 行:

Team    3PtTakeRate 2PtTakeRate
Savannah St 0.577   0.423
Quinnipiac  0.538   0.462
Citadel     0.536   0.464
Villanova   0.535   0.465
Winthrop    0.527   0.473
Longwood    0.501   0.499
Elon        0.500   0.500
Auburn      0.496   0.504
Campbell    0.490   0.510
N Dakota St 0.482   0.518
N Hampshire 0.481   0.519

如果重要的话,我会从 csv 文件中加载数据:

TeamShotChoices = pd.read_csv("NCAAExpValue.csv",sep=',')

这是我的函数的样子:

def PtsPerSuccess(Team):
    TeamPts = ((TeamShotChoices.loc[TeamShotChoices['Team']==Team,'3PtTakeRate']) * 3) + ((TeamShotChoices.loc[TeamShotChoices['Team']==Team,'2PtTakeRate']) * 2)
    return TeamPts

Team 参数将是引号中的团队名称。作为记录,在较大的函数中,此参数将从字符串列表中提取,并且需要为团队和以下时间找到此值....但我应该能够使用 [i]和 [i + 1] 和索引。所以,再次,应该没问题....

当我运行这个函数时,例如:

PtsPerSuccess('Savannah St')

我得到的是这样的:

0    2.577
dtype: float64

我将使用 2.577 作为我乘以的数字,然后在 if 语句中使用该结果来确定模拟游戏的获胜者。所以返回的方式是行不通的。

我感到困惑的是,为什么它会给我所有这些信息。我不想要 0(这是行号),也不想要 dtype。在这种情况下,我只希望函数返回 2.577。

【问题讨论】:

return TeamPts.iloc[0] 【参考方案1】:

简单的原因是您基本上是在 pandas 对象上执行转换,该对象通常包含多个值。 pandas知道 Team 的每个值都是唯一的(怎么可能?),因此它假定选择和乘法运算会导致另一个结果也包含多个值。 p>

为了尽量减少对代码的干扰,您只需将 return 语句更改为 return TeamPts[0]

【讨论】:

你最后提出的东西可能会奏效。谢谢你....当我把它放到一个更大的函数中时会告诉你它是否会中断.... 至于第一点:但我直接告诉它,在行中,团队价值必须等于论据。那么它不应该只是从该行中提取正确的列值吗?不太确定为什么该方法不起作用。

以上是关于如何让 df.loc 从数据帧的特定单元格返回值(数字)?的主要内容,如果未能解决你的问题,请参考以下文章

使用单元格的位置替换单元格值

Pandas选取行,列总结

如何从特定表行的 jQuery 数据表中访问单元格

在忽略几行的同时在DataFrame上使用.loc

使用 loc 删除索引过滤的数据帧

如何使用str.contains函数使用行索引替换单元格值