【问题标题】:Pandas Series TypeError and ValueError when using datetime使用日期时间时的 Pandas 系列 TypeError 和 ValueError
【发布时间】:2014-09-30 17:04:19
【问题描述】:

下面的代码可以正常工作(如预期的那样):

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。

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    系列是单一类型的。因此,不建议尽可能将不同的 dtypes 放在一个容器中。该系列将在您添加它们时更改 dtype 以适应 dtypes(仅供参考,这根本没有效率,最好首先传入一个列表)。

    您的示例失败了,因为 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
    

    【讨论】:

      猜你喜欢
      • 2018-12-06
      • 2021-03-25
      • 2017-09-15
      • 2017-04-04
      • 2013-08-01
      • 1970-01-01
      相关资源
      最近更新 更多