使用datetime时的Pandas Series TypeError和ValueError

时间:2014-09-30 17:04:20

标签: python pandas

下面的代码很好(正如预期的那样):

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。

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