Pandas:第一个datetime字段自动转换为时间戳类型

时间:2015-11-11 17:27:42

标签: python datetime pandas dataframe

创建pandas数据帧对象(python 2.7.9,pandas 0.16.2)时,第一个datetime字段会自动转换为pandas时间戳。为什么?是否可以防止这种情况,以便将字段保持原始类型?

请参阅以下代码:

import numpy as np
import datetime
import pandas

创建一个词典:

x = {'cusip': np.array(['10553M10', '67085120', '67085140'], dtype='|S8'), 

     'vstart':np.array([datetime.datetime(2001, 11, 16, 0, 0),
     datetime.datetime(2012, 2, 28, 0, 0), datetime.datetime(2014, 12, 22, 0, 0)], 
     dtype=object), 

     'vstop': np.array([datetime.datetime(2012, 2, 28, 0, 0), 
     datetime.datetime(2014, 12, 22, 0, 0), datetime.datetime(9999, 12, 31, 0, 0)], 
     dtype=object), 

     'id': np.array(['EQ0000000000041095', 'EQ0000000000041095', 'EQ0000000000041095'], 
     dtype='|S18')}

因此,vstart和vstop键到目前为止是datetime。但是,之后:

df = pandas.DataFrame(data = x)

当vstop保持日期时间时,vstart会自动成为pandas时间戳

type(df.vstart[0])
#class 'pandas.tslib.Timestamp'
type(df.vstop[0])
#type 'datetime.datetime'

我不明白为什么构造函数遇到的第一个datetime列会被pandas转换为Timestamp。以及如何告诉pandas保持数据类型不变。你能帮我吗?谢谢。

1 个答案:

答案 0 :(得分:1)

实际上我已经注意到您的数据中存在某些内容,它与您的列vstop中的第一个或第二个日期列无关,如果您更改了日期时间值dt.datetime(9999, 12, 31, 0, 0)这一年的年份为2020这样的正常年份,例如,两个列的处理方式相同。

请注意,我将datetime模块导入dt

x = {'cusip': np.array(['10553M10', '67085120', '67085140'], dtype='|S8'), 
     'vstop': np.array([dt.datetime(2012, 2, 28, 0, 0), dt.datetime(2014, 12, 22, 0, 0), dt.datetime(2020, 12, 31, 0, 0)], dtype=object),
     'vstart': np.array([dt.datetime(2001, 11, 16, 0, 0),dt.datetime(2012, 2, 28, 0, 0), dt.datetime(2014, 12, 22, 0, 0)], dtype=object), 
     'id': np.array(['EQ0000000000041095', 'EQ0000000000041095', 'EQ0000000000041095'], dtype='|S18')}

In [27]:
df = pd.DataFrame(x)
df
Out[27]:
cusip                   id          vstart  vstop
10553M10    EQ0000000000041095  2001-11-16  2012-02-28
67085120    EQ0000000000041095  2012-02-28  2014-12-22
67085140    EQ0000000000041095  2014-12-22  2020-12-31

In [25]:
type(df.vstart[0])
Out[25]:
pandas.tslib.Timestamp

In [26]:
type(df.vstop[0])
Out[26]:
pandas.tslib.Timestamp