创建新列时日期转换不起作用
Posted
技术标签:
【中文标题】创建新列时日期转换不起作用【英文标题】:Date conversion doesn't work when creating new column 【发布时间】:2018-11-01 14:58:17 【问题描述】:我想要做的是将我的日期转换为 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]')
在此处查看输出 -
名称:日期,数据类型:datetime64[ns]
所以,我的问题是,为什么在我创建新列时它不起作用?
注意:我知道最后一行会产生警告。所以我也尝试了下面的方法,但它没有产生 datetime64[D]
newcol = df2['date'].values.astype('datetime64[D]')
df2.assign(date = newcol)
【问题讨论】:
我不明白。哪里有恢复到object
的东西?
如果你指的是为什么 dtype 是 datetime64[ns]
而不是 datetime64[D]
我发现这个其他有用的 SO 链接 ***.com/questions/31917964/…
日期回到 datetime64[ns] 即使在使用 df2['date'].values.astype('datetime64[D]') @roganjosh
刚刚看到给你的链接。我对此一无所知。熊猫约会时间更有趣:)
@Orenshi 我看到了那个链接 - 但没有解决我的问题。
【参考方案1】:
Pandas 开发人员 Jeff Reback,wrote the following in 2014(我认为它仍然存在)
我们不允许直接转换,因为它太复杂了 在内部保留除 datetime64[ns] 以外的任何内容(也没有必要 完全)。可以做到,但不是很有用恕我直言。
这目前尚未实现,但执行起来非常简单。
因此,可能无法将数据框列作为datetime64[D]
,而只能作为datetime64[ns]
。
如果需要该列,则使用 .values
返回该列的 Numpy 表示并使用它,如下所示
dates = df['date'].values.astype('datetime64[D]')
【讨论】:
以上是关于创建新列时日期转换不起作用的主要内容,如果未能解决你的问题,请参考以下文章