我正在尝试对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
答案 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)