在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值,以及如何避免问题并正确地将时间戳附加到系列?
我同意@MrE,他说:
我认为这是有道理的:5不是日期时间对象,所以pandas正在解析数据并发现你同时拥有一个数字和一个datetime对象,并且它将两者解析为'object'字符串,因为dtype需要保持一致系列中的所有数据。日期时间的字符串表示形式是日期字符串,而不是时间戳。然后,当您添加到它时,您可以修改单元格的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
如果您的系列数据类型不是日期类型之一(例如datetime64 [ns]),则会发生这种情况。将值分配给g ['datetime']时,系列是对象数据类型。因此,这种情况正在发生。另请注意此整数的时间戳如何是相同的日期
pd.Timestamp(1514851200000000000)
>>> Timestamp('2018-01-02 00:00:00')
整数表示以纳秒为单位的unix时间