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

问题描述 投票:8回答:2

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

python pandas
2个回答
0
投票

我同意@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

0
投票

如果您的系列数据类型不是日期类型之一(例如datetime64 [ns]),则会发生这种情况。将值分配给g ['datetime']时,系列是对象数据类型。因此,这种情况正在发生。另请注意此整数的时间戳如何是相同的日期

pd.Timestamp(1514851200000000000)
>>> Timestamp('2018-01-02 00:00:00')

整数表示以纳秒为单位的unix时间

© www.soinside.com 2019 - 2024. All rights reserved.