我正在熊猫数据帧上调用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]]]
我的规格如下:
这是怎么回事?