【发布时间】:2015-05-13 03:53:56
【问题描述】:
我目前正在使用 python 尝试将日期时间列拆分为 2 个,一个用于日期,一个用于时间,并且该列的格式也正确。
原始数据集
INCIDENT_DATE
12/31/2006 11:20:00 PM
12/31/2006 11:30:00 PM
01/01/2007 00:25
01/01/2007 00:10
12/31/2006 11:30:00 AM
01/01/2007 00:05
01/01/2007 00:01
12/31/2006 4:45:00 PM
12/31/2006 11:50:00 PM
**01/01/2007**
*我使用了 2 个代码,一个用于格式化列,另一个用于拆分它。但是,在格式化该列后,缺少的时间值给出了 00:00:00 值,这里表示时间为午夜 12 点。见下文
格式化后
2006-12-31 23:20:00
2006-12-31 23:30:00
2007-01-01 00:25:00
2007-01-01 00:10:00
2006-12-31 11:30:00
2007-01-01 00:05:00
2007-01-01 00:01:00
2006-12-31 16:45:00
2006-12-31 23:50:00
**2007-01-01 00:00:00**
使用的代码:
## Format datetime column
crimeall['INCIDENT_DATE'] = pd.DatetimeIndex(crimeall['INCIDENT_DATE'])
##Split DateTime column
crimeall['TIME'],crimeall['DATE']= crimeall['INCIDENT_DATE'].apply(lambda x:x.time()), crimeall['INCIDENT_DATE'].apply(lambda x:x.date())
是否可以在不将缺失时间值设置为 00:00:00 的情况下执行此操作?格式化日期时间时是否可以将这些缺失值记录为 Nan?
关于如何实现将缺失时间值显示为 NaN 的格式化日期时间的任何想法。
我希望它看起来像什么
2006-12-31 23:20:00
2006-12-31 23:30:00
2007-01-01 00:25:00
2007-01-01 00:10:00
2006-12-31 11:30:00
2007-01-01 00:05:00
2007-01-01 00:01:00
2006-12-31 16:45:00
2006-12-31 23:50:00
**2007-01-01 NaN**
希望有办法完成这项工作。
【问题讨论】:
-
抱歉,您能否编辑您的问题,因为我不明白
**的用途。如果您使用的是最新版本的熊猫,您还可以发布您的真实原始输入数据,那么您应该可以,如果INCIDENT_DATE已经是日期时间 dtype,只需执行crimeall['TIME'],crimeall['DATE']= crimeall['INCIDENT_DATE'].dt.time, crimeall['INCIDENT_DATE'].dt.date -
如果我正确理解您的问题,您的问题是您的日期字符串的格式不一致,因此当您构建 datetimeindex 或使用
pd.to_datetime时,任何缺少的时间部分(或日期部分)问题)将提供默认值,之后您可以将00:00:00替换为NaT -
但是假设
00:00:00是NaT是有问题的,因为它很可能是有效的。确定哪些值是有效的需要在转换为日期时间之前完成。