Nižšie uvedený kód funguje správne (podľa očakávania):
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
Ale raz ser["no_num"]
je nastavená na číslo, zvyšuje TypeError:
ser = Series()
ser["no_num"] = 5.0
ser["time"] = timestamp
# TypeError: invalid type promotion
Veci sa dostanú zbytočne, ak pridelíte timestamp
keď je index najprv definovaný:
ser = Series(index=["time"])
ser["time"] = timestamp
# ValueError: ["t" "i" "m" "e"] not contained in the index
Je to chyba alebo nejako očakávané správanie?
Môj Python je 3.4.1 a Pandas je 0.14.1.
odpovede:
3 pre odpoveď č. 1Série sú jednozložkové. Umiestnenie rôznych typov v jednom kontajneri, ak je to možné, sa neodporúča. Série sa zmení dtype tak, aby vyhovovala dtypes pri ich pridávaní (čo FYI nie je efektívne vôbec, lepšie prejsť do zoznamu na prvom mieste).
Váš príklad zlyhá, pretože séria je už float dtype a nemôže držať a Timestamp
čo je objekt.
Môžete to urobiť, ak naozaj chcete.
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