2016-04-19 2 views
7

У меня есть серия панд, в которой каждая ячейка является кортежем. Я пытаюсь сделать roll(). Apply() в этой серии, и функция, которую я пытаюсь применить, никогда не вызывается. Вот простой пример, который показывает, что я говорю о:Почему мои панды катятся(). Apply() работают, когда серия содержит коллекции?

>>> import pandas as pd 
>>> pd.__version__ 
u'0.18.0' 
>>> die = lambda x: 0/0 

>>> s = pd.Series(zip(range(5), range(5))) 
>>> s 
0 (0, 0) 
1 (1, 1) 
2 (2, 2) 
3 (3, 3) 
4 (4, 4) 
dtype: object 

Простой apply работает, как и ожидалось, в том, что функция называется:

>>> s.apply(die) 
[...] 
ZeroDivisionError: integer division or modulo by zero 

Но но rolling().apply() не делает ничего, и, в частности, функция, которая, как предполагается, не будет применяться не вызывается:

>>> s.rolling(2).apply(die) 
0 (0, 0) 
1 (1, 1) 
2 (2, 2) 
3 (3, 3) 
4 (4, 4) 
dtype: object 

Это самый простой пример, который показывает, что я говорю о том, но то же самое происходит с наборами & списков.

Почему это происходит, и как я могу выполнить кастинг с пользовательской функцией в серии коллекций?

+2

Я верю, что roll(). Apply() и expand(). Apply() не реализованы для объектов. Я задал аналогичный вопрос несколько часов назад http://stackoverflow.com/q/36717416/2285236 – ayhan

ответ

0

Это не будет работать, так как функция pandas.DataFrame.rolling возвращает окно или прокатка суб-классифицироваться для конкретной операции в то время как pandas.DataFrame.applyПрименяется функция вдоль входной оси DataFrame. Как упоминалось ayhan, в сообщении this.

Смежные вопросы