Функция Pandas apply () ведет себя по-разному в зависимости от того, что возвращается? - PullRequest
0 голосов
/ 30 апреля 2019

Я звоню apply() во фрейме данных Pandas, но кажется, что примененная функция вызывается дважды, когда она возвращает массивы, и один раз, когда она возвращает плавающие значения.

Рассмотрим следующий пример.

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

Однако, если яcall 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

Что происходит?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...