下面的代码很好(正如预期的那样):
import dateutil
from pandas import Series
timestamp = dateutil.parser.parse("2014-09-30 00:00:00")
ser = Series()
ser['no_num'] = 'string is fine'
ser['time'] = timestamp
# works
ser = Series()
ser['time'] = timestamp
# works
但是一旦ser['no_num']
设置为数字,它就会引发TypeError:
ser = Series()
ser['no_num'] = 5.0
ser['time'] = timestamp
# TypeError: invalid type promotion
如果在首先定义索引时指定timestamp
,事情会变得更加奇怪:
ser = Series(index=['time'])
ser['time'] = timestamp
# ValueError: ['t' 'i' 'm' 'e'] not contained in the index
这是一个错误还是某种预期的行为?
我的Python是3.4.1,Pandas是0.14.1。
答案 0 :(得分:3)
系列是单一的。因此,不建议在可能的情况下将不同的dtypes放在单个容器中。该系列将更改dtype以适应添加它们的dtypes(FYI根本不高效,最好先传入列表)。
您的示例失败,因为Series已经是float dtype,并且无法保存作为对象的Timestamp
。
如果你真的想要,你可以这样做。
In [42]: ser = Series([5.0,timestamp],['no_num','time'])
In [43]: ser
Out[43]:
no_num 5
time 2014-09-30 00:00:00
dtype: object