熊猫的apply()函数的行为会有所不同,具体取决于返回的内容是什么?

时间:2019-04-30 13:01:07

标签: python python-3.x pandas numpy

我正在熊猫数据帧上调用apply(),但似乎该应用函数在返回数组时被调用两次,而在返回浮点数时被调用一次。

请考虑以下示例。

from pandas import DataFrame
from numpy.random import random

def array_or_float(flag, x):
    """ Either return a random array or float depending on `flag` """

    if flag:
        value = random((2,1))

    else:            
        value = random()

    print('Got', round(x, 5), 'returns', value)

    return value

df = DataFrame({'A values': random(3)})
df['B values'] = df.apply(lambda x: array_or_float(True, x['A values']), axis=1)

print('\nData frame:')
print(df)

如果我在array_or_float(False)内调用apply(),即如果我希望函数仅返回浮点数,则输出是一致的。

Got 0.46005 returns 0.6578862349718622
Got 0.64534 returns 0.8690478424766472
Got 0.04175 returns 0.41617107157789923

Data frame:
   A values  B values
0  0.460050  0.657886
1  0.645342  0.869048
2  0.041752  0.416171

但是,如果我调用array_or_float(True),即我想获取数组,那么似乎有一个“孤立”调用甚至没有应用到数据帧,即第一个。

Got 0.88822 returns [[0.31850227]
 [0.66878704]]
Got 0.88822 returns [[0.70890116]
 [0.9087984 ]]
Got 0.51507 returns [[0.92748729]
 [0.98650649]]
Got 0.91706 returns [[0.82387122]
 [0.86967768]]

Data frame:
   A values                                      B values
0  0.888216  [[0.7089011570815329], [0.9087983994394716]]
1  0.515068    [[0.92748728847228], [0.9865064881611074]]
2  0.917061  [[0.8238712182074142], [0.8696776790080818]]]

我的规格如下:

  • Python 3.6.8
  • NumPy 1.15.4
  • 熊猫0.24.0

这是怎么回事?

0 个答案:

没有答案