我要做的是将我的日期转换为datetime64 [D]。在源头 - 一些日期是对象类型,一些日期是datetime64 [ns]。 我不是在问如何进行转换 - 我知道。但是当我创建一个新列时发生了一些事情,并且代码似乎没有影响,而datetime64 [ns]也没有改变。
df2['date'].values.astype('datetime64[D]')
这是示例数据框:
d = {'date' :['2015-10-05 15:08:43', '2015-10-05 19:17:12', '2015-10-06 15:51:22', '2015-10-06 19:39:18', '2015-10-06 19:58:06', '2015-12-18 11:09:01'], 'name': ['john', 'tom', 'phill', 'nero', 'bob', 'rob']}
df2 = pd.DataFrame(data = d)
df2中的日期是对象类型。当我们做以下
df2['date'] = pd.to_datetime(df2['date'])
日期变为dtype:datetime64 [ns]。
现在,以下代码可以正常工作并生成datetime64 [D]输出
df2['date'].values.astype('datetime64[D]')
但是当我创建一个新列时,它会回到
df2['date'] = df2['date'].values.astype('datetime64[D]')
请参阅此处的输出 -
名称:日期,dtype:datetime64 [ns]
所以,我的问题是,当我创建新列时,为什么它不起作用?
注意:我知道最后一行会产生警告。所以我也尝试了以下方法,但它没有生成datetime64 [D]
newcol = df2['date'].values.astype('datetime64[D]')
df2.assign(date = newcol)
答案 0 :(得分:0)
Jeff Reback,熊猫开发者,wrote the following in 2014(我认为它仍然存在)
<块引用>我们不允许直接转换,因为它太复杂了 在内部保留除 datetime64[ns] 以外的任何内容(也不需要 一点)。可以做到,但恕我直言不是很有用。
这目前没有实现,但很容易做到。
因此,可能无法将数据框列设为 datetime64[D]
,只能设为 datetime64[ns]
。
如果需要该列,则使用 .values
返回该列的 Numpy 表示并使用它,如下所示
dates = df['date'].values.astype('datetime64[D]')