2016-02-06 4 views
0

Я пытаюсь применить операцию к каждому значению в серии datetime. Я уменьшил это до печати лямбда, чтобы проиллюстрировать проблему. Это работает в другом подобном формате данных, но не на этом? Python - версия 3.5.1, версия pandas 0.17.1.pandas df.apply TypeError тип данных непонятен

Несколько дополнительных дополнений, удовлетворяющих требованию многословия.

print(dfY.info()) 
print(dfY) 
dfY.apply(lambda rr: print(rr['predicted_time']), 1) 

выход

<class 'pandas.core.frame.DataFrame'> 
Int64Index: 21 entries, 0 to 20 
Data columns (total 1 columns): 
predicted_time 21 non-null datetime64[ns, pytz.FixedOffset(60)] 
dtypes: datetime64[ns, pytz.FixedOffset(60)](1) 
memory usage: 336.0 bytes 
None 
       predicted_time 
0 2005-02-01 02:40:00+01:00 
1 2005-02-01 02:40:00+01:00 
2 2005-02-01 02:40:00+01:00 
3 2005-02-01 02:40:00+01:00 
4 2005-02-01 02:43:00+01:00 
5 2005-02-01 02:43:00+01:00 
6 2005-02-01 02:43:00+01:00 
<snip> 
19 2005-02-01 02:50:00+01:00 
20 2005-02-01 02:50:00+01:00 

--------------------------------------------------------------------------- 
TypeError         Traceback (most recent call last) 
<ipython-input-43-8ae0cf570812> in <module>() 
     1 print(dfY.info()) 
     2 print(dfY) 
----> 3 dfY.apply(lambda rr: print(rr['predicted_time']), 1) 

/.../Projects/Software/TimeTillComplete/venv/lib/python3.5/site-packages/pandas/core/frame.py in apply(self, func, axis, broadcast, raw, reduce, args, **kwds) 
    3970      if reduce is None: 
    3971       reduce = True 
-> 3972      return self._apply_standard(f, axis, reduce=reduce) 
    3973    else: 
    3974     return self._apply_broadcast(f, axis) 

/.../Projects/Software/TimeTillComplete/venv/lib/python3.5/site-packages/pandas/core/frame.py in _apply_standard(self, func, axis, ignore_failures, reduce) 
    4017    # Create a dummy Series from an empty array 
    4018    index = self._get_axis(axis) 
-> 4019    empty_arr = np.empty(len(index), dtype=values.dtype) 
    4020    dummy = Series(empty_arr, index=self._get_axis(axis), 
    4021       dtype=values.dtype) 

TypeError: data type not understood 
+0

Почему вы хотите печатать в 'apply'? Цель «apply» заключается в том, что он возвращает что-то обратно. – joris

+0

Тот факт, что вы получаете TypeError, кажется ошибкой в ​​пандах, теперь сообщается здесь: https://github.com/pydata/pandas/issues/12244. Применяя его к колу, как говорит @Goyo, похоже, сейчас работает. – joris

ответ

2

Я на самом деле не известно, что происходит, но в качестве обходного пути вы можете получить ожидаемый результат, призывающую apply() на колонке:

dfY['predicted_time'].apply(lambda rr: print(rr)) 

EDIT Похоже, вы попали в жуки в пандах. Проблема запускается с использованием временных меток времени, заданных в фрейме данных. Использование серии работает, как показано выше. Использование наивных временных меток также работает:

df = pd.DataFrame(pd.Series(dfY['predicted_time'].values), 
        columns=['predicted_time']) 
df.apply(lambda rr: print(rr['predicted_time']), 1) 
Смежные вопросы