pandas df.apply无法理解TypeError数据类型

时间:2016-02-06 13:38:02

标签: python numpy pandas

我正在尝试对datetime系列中的每个值应用操作。我把它减少为lambda打印来说明问题。 这适用于另一个类似的数据帧,但不适用于这个? Python是版本3.5.1,pandas版本0.17.1。

更多填充以满足SO问题详细程度要求。

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

1 个答案:

答案 0 :(得分:2)

我真的不知道发生了什么,但作为一种解决方法,您可以在列上获得预期的输出调用apply()

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

修改 看起来你在熊猫中遇到了一个bug。通过在数据帧中使用时区感知时间戳来触发此问题。使用一系列作品如上所示。使用天真时间戳也有效:

df = pd.DataFrame(pd.Series(dfY['predicted_time'].values),
                  columns=['predicted_time'])
df.apply(lambda rr: print(rr['predicted_time']), 1)