python - 创建新列时日期转换不起作用
问题描述
我想要做的是将我的日期转换为 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)
解决方案
Pandas 开发人员 Jeff Reback在 2014 年写了以下内容(我认为它仍然存在)
我们不允许直接转换,因为它太复杂了,无法在内部保留除 datetime64[ns] 以外的任何内容(根本没有必要)。它可以完成,但不是很有用恕我直言。
这目前还没有实现,但做起来很简单。
因此,可能无法将数据框列设置为datetime64[D]
,仅作为datetime64[ns]
。
如果需要该列,则使用该列返回该列的 Numpy 表示.values
并使用它,如下所示
dates = df['date'].values.astype('datetime64[D]')
推荐阅读
- reactjs - 使用 axios 从 api 获取返回的问题
- flutter - 在 Scaffold 的 persistentFooterButtons 中对齐两个 DropdownButtons
- c# - 从服务器获取 3d 模型并统一显示
- php - 无法在其他控制器中获取会话数据
- java - REST API 和处理大量数据的连续调用
- python - PySide *any* 方法调用 - 信号和插槽
- javascript - 为什么此方法在加载数据后在控制台中有效,但在与元素上的事件一起使用时无效?
- android - java.lang.IllegalStateException:在 FragmentManager
- dart - 首次启动时显示双 FAB 按钮
- javascript - 避免仅在按 Enter 键时提交表单