在Python中,熊猫:
g = pd.Series(dict(a = 5, b =datetime(2018, 1,1)))
g['datetime'] = pd.Timestamp('2018-01-02')
g
返回:
a 5
b 2018-01-01 00:00:00
datetime 1514851200000000000
dtype: object
任何人都知道为什么时间戳在这里转换为其int值,以及如何避免问题并正确地将时间戳附加到系列?
答案 0 :(得分:0)
我同意@MrE,正如他所说:
我认为这是有道理的:5不是日期时间对象,因此pandas正在解析数据,发现您同时拥有数字和日期时间对象,并且将两者都解析为“对象”字符串,因为dtype需要在系列中的所有数据之间保持一致。 datetime的字符串表示形式是日期字符串,而不是时间戳。然后添加到它时,您可以修改单元格的dtype
我真的同意,它必须找到一个dtype
并找到int
,如果您删除'a'
索引,它将可以工作(这基本上是在检查上面的内容是否正确或不是)
g = pd.Series(dict(b =datetime(2018, 1,1)))
g['datetime'] = pd.Timestamp('2018-01-02')
print(g)
输出:
b 2018-01-01
datetime 2018-01-02
dtype: datetime64[ns]
这是真的。
只需在末尾添加一行:
g['datetime']=pd.to_datetime(g['datetime'])
现在:
print(g)
是:
a 5
b 2018-01-01 00:00:00
datetime 2018-01-02 00:00:00
dtype: object
答案 1 :(得分:0)
如果您的系列数据类型不是日期类型之一(例如datetime64 [ns]),则会发生这种情况。当您将值分配给g ['datetime']时,您的系列是对象数据类型。因此,这正在发生。另请注意,该整数的时间戳记是同一日期
pd.Timestamp(1514851200000000000)
>>> Timestamp('2018-01-02 00:00:00')
整数表示以毫秒为单位的unix时间