【问题标题】:Pandas bug? applying lambda on multiple columns row.name has strange behavior熊猫虫?在多列 row.name 上应用 lambda 有奇怪的行为
【发布时间】:2019-08-14 20:49:43
【问题描述】:

我有以下代码:

d = {'p': [1, 1], 'm': [1, 1]}
df = pd.DataFrame(data=d)
df.apply(lambda row: pandas.Series(meth(row.name)), axis=1)

def meth(i):
    return [2, 3]

在迭代过程中,在“meth”返回语句处有断点,“i”具有以下值:

{int64} 0
{int} 0 !!!
{int} 1

所以我有一个额外的迭代和类型的变化,这很奇怪。 蟒蛇3.6;熊猫 0.25.0,Pycharm PyCharm 2019.2(专业版) 构建 #PY-192.5728.105,构建于 2019 年 7 月 23 日

我试过没有'pandas.Series'的代码,只返回一个整数,行索引是正确的,它的类型总是{int64}。

怎么了?

【问题讨论】:

  • 我相信apply 方法在实际循环之前运行了测试/优化。这就是您看到两个 0 值的原因。
  • IIUC,github 他们解决了您对“额外”迭代的担忧
  • 非常感谢您的参考,我的头痛好多了:)!然而,这是主题的新变体,因为它现在是上下文相关的。现在我明白'这是预期的'见github。也许我错了,但在过去,编程并不意味着预期的意外行为。 :) 至少,在这种情况下,row.name 需要折旧。

标签: python pandas lambda apply


【解决方案1】:

根据notes section of the documentation

在当前实现中,apply 在第一列/行上调用 func 两次,以决定它是否可以采用快速或慢速代码路径。如果 func 有副作用,这可能会导致意外行为,因为它们会对第一列/行生效两次。

【讨论】:

    猜你喜欢
    • 2018-12-07
    • 1970-01-01
    • 1970-01-01
    • 2013-08-18
    • 1970-01-01
    • 2017-08-13
    • 1970-01-01
    • 2019-12-19
    • 2017-03-14
    相关资源
    最近更新 更多