创建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保持数据类型不变。你能帮我吗?谢谢。
答案 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