为具有pandas的系列分配时间戳值会创建一个int

时间:2018-05-20 04:12:56

标签: python pandas

在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值,以及如何避免问题并正确地将时间戳附加到系列?

2 个答案:

答案 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时间