【问题标题】:Pandas Series Apply Method熊猫系列申请方法
【发布时间】:2016-06-09 20:49:22
【问题描述】:

我一直在对系列和数据框使用 pandas 应用方法,但我显然仍然缺少一些东西,因为我对我正在尝试执行的一个简单函数感到困惑。

这就是我正在做的:

def minmax(row):
    return (row - row.min())/(row.max() - row.min())

row.apply(minmax)

但是,这会返回一个全零系列。例如,如果

row = pd.Series([0, 1, 2])

然后

minmax(row)

根据需要返回 [0.0, 0.5, 1.0]。但是,row.apply(minmax) 返回 [0,0,0]。

我相信这是因为系列是整数,整数除法返回 0。但是,我不明白,

  • 为什么它与 minmax(row) 一起使用(不应该是一样的吗?),以及
  • 如何在 apply 函数中正确地转换它以返回适当的浮点值(我尝试使用 .astype 来转换它,这给了我所有的 NaN...我也不明白)
  • 如果将其应用于数据帧,作为 df.apply(minmax),它也可以按需要工作。 (添加编辑)

我怀疑我错过了应用程序如何工作的一些基本内容......或者是密集的。无论哪种方式,提前谢谢。

【问题讨论】:

  • 您使用的是什么版本的熊猫?我无法复制这个。
  • 啊...嗯,这给了我一些鼓励。另外,我刚刚补充说,将它应用到数据框就可以了。熊猫 0.18.0...

标签: python pandas apply


【解决方案1】:

当您在 Series 上调用 row.apply(minmax) 时,只有值会传递给函数。这称为element-wise

对 Series 的值调用函数。可以是 ufunc(适用于整个系列的 NumPy 函数)或仅适用于单个值的 Python 函数。

当您在 DataFrame 上调用 row.apply(minmax) 时,行(默认)或列都会传递给函数(根据 axis 的值)。

传递给函数的对象是具有 DataFrame 索引 (axis=0) 或列 (axis=1) 索引的 Series 对象。返回类型取决于传递的函数是否聚合,或者如果 DataFrame 为空,则归约参数。这称为row-wisecolumn-wise

这就是为什么您的示例在 DataFrame 而不是 Series 上按预期工作的原因。检查此answer 以获取有关将函数映射到Series 的信息。

【讨论】:

  • 啊!我忽略了唯一可以应用于整个系列的函数是 numpy 函数。因此,在这种特殊情况下,我相信 apply 的工作方式与 map 相同。你能解释一下为什么 python 不会因为将 .min() 和 .max() 应用于这些值而感到不安吗?在这种情况下,这是没有意义的,我本以为会出错。我这样做了 row.apply(lambda x: x - x.min()) 来测试你在说什么,它还返回 [0,0,0] 所以我收集 x.min() == x但我认为它会出错。谢谢!
  • 这很奇怪,在我的测试中,Series 上的函数调用会产生错误AttributeError: 'int' object has no attribute 'min'。这似乎是预期的行为。
  • 嗯。你用的是什么熊猫?我已经在 J​​uypter(我工作的地方)和 PyCharm 中的脚本中重新创建了它,没有错误。提出一个错误会为我节省很多时间。 :) 我会更新到 0.18.1 看看。再次感谢。
猜你喜欢
  • 1970-01-01
  • 2017-11-08
  • 2016-12-08
  • 1970-01-01
  • 1970-01-01
  • 2021-09-12
  • 2019-07-04
  • 2020-06-03
  • 2020-12-01
相关资源
最近更新 更多