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

jim*_*iat 8 python pandas

在Python中,熊猫:

g = pd.Series(dict(a = 5, b =datetime(2018, 1,1)))
g['datetime'] = pd.Timestamp('2018-01-02')
Run Code Online (Sandbox Code Playgroud)

g 收益:

a                             5
b           2018-01-01 00:00:00
datetime    1514851200000000000
dtype: object
Run Code Online (Sandbox Code Playgroud)

任何人都知道为什么时间戳在这里转换为其int值,以及如何避免问题并正确地将时间戳附加到系列?

U10*_*ard 1

我同意@MrE,他说:

我认为这是有道理的: 5 不是日期时间对象,因此 pandas 正在解析数据并发现您同时拥有数字和日期时间对象,并且它将两者解析为“对象”字符串,因为 dtype 需要在各个对象之间保持一致系列中的所有数据。日期时间的字符串表示形式是日期字符串,而不是时间戳。当您添加到它时,您可以修改单元格的数据类型

我真的同意,它必须找到 adtype并找到int,如果你删除'a'索引,它就会起作用(这基本上是检查上述内容是否正确):

g = pd.Series(dict(b =datetime(2018, 1,1)))
g['datetime'] = pd.Timestamp('2018-01-02')
print(g)
Run Code Online (Sandbox Code Playgroud)

输出:

b          2018-01-01
datetime   2018-01-02
dtype: datetime64[ns]
Run Code Online (Sandbox Code Playgroud)

所以这是真的。

要解决这个问题:

只需在末尾添加一行:

g['datetime']=pd.to_datetime(g['datetime'])
Run Code Online (Sandbox Code Playgroud)

现在:

print(g)
Run Code Online (Sandbox Code Playgroud)

是:

a                             5
b           2018-01-01 00:00:00
datetime    2018-01-02 00:00:00
dtype: object
Run Code Online (Sandbox Code Playgroud)