python - 关于仅在使用 pd.to_datetime 后保留日期信息
问题描述
原始记录有如下格式,即日期信息以字符串格式存储
records[‘start_date’].unique()
array([nan, '6/3/2012', '10/20/2013'], dtype=object)
正如这个论坛所建议的,我使用以下代码将其转移到 datetime
Records[‘start_date’] = pd.to_datatime(records[‘start_date’], format =’%m/%d/%Y’)
转移的数组有以下总结
array(['NaT', '2012-06-03T00:00:00.000000000',
'2013-10-20T00:00:00.000000000',], dtype='datetime64[ns]')
我想让传输的日期时间格式更精简,只保留日期而不保留那些分钟/秒信息。具体来说,我想要这样的格式
array(['NaT', '2012-06-03,
'2013-10-20',], dtype='datetime64[ns]')
如何实现这一目标?谢谢
解决方案
我想让传输的日期时间格式更精简,只保留日期而不保留那些分钟/秒信息。
这是不准确的。np.datetime64
本质上是int64
. 因此,这种格式将比字符串更有效地存储日期(包括时间等)。不要被显示所迷惑:'2012-06-03T00:00:00.000000000'
它只是一个底层整数的文本表示。这里有一些证据:
import datetime, sys, numpy as np
now = datetime.datetime.now()
x_date = sys.getsizeof(np.datetime64(now)) # 40
x_int = sys.getsizeof(np.datetime64(now).astype(int)) # 28
y = sys.getsizeof('10/20/2013') # 59
现在,如果您主要关心display,那么您可以在 Pandas 中将您的系列转换为object
dtype 系列中保存的字符串:
records['start_date'] = records['start_date'].dt.strftime('%Y-%m-%d')
另一种方法是使用一系列datetime.date
对象:
records['start_date'] = records['start_date'].dt.date
请注意,进一步的操作将导致内存和性能效率低下,第一个选项更是如此。
推荐阅读
- java - 禁止移动,在 Java 中的 Minecraft 上的 GUI 中添加项目
- amazon-web-services - AWS amplify 为 2 个不同的放大应用程序配置子域
- c# - EF Core 删除未提交迁移的正确方法
- reactjs - ReactJS,渲染循环中子级和父级之间的道具
- angular - 现有 Angular 11 应用上的 Angular Universal
- android - {MAC OS BIG SUR} 从 expo 应用程序扫描二维码时出现“网络响应超时”错误
- npm - 无法在 Ubuntu 18.04 中运行 npm start 或 npm install
- java - “BasicBatchConfigurer”已保护访问 - Spring Batch/Spring Boot 未将数据持久化到数据库
- proxy - 在 python 中构建代理服务器
- python - 删除带有条件的 RDD 值