繁体   English   中英

格式化日期时间变量将缺少的时间值指定为00:00:00。使用Python

[英]Formatting datetime variables give missing time values as 00:00:00. Using Python

我目前正在使用python尝试将datetime列拆分为2,一个用于Date,一个用于时间,并且还使列格式正确。

原始数据集

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**

希望有办法完成这项工作。

ambiguous ='NaT'添加到pd.DatetimeIndex 如果这不起作用,您可以使用类似的东西来修补值

crimeall['TIME'] = [np.NaN if t.isoformat()=='00:00:00' else t for t in crimeall['TIME']]

我不相信有任何方法可以使类似日期时间的列部分有效且部分为NaN。 请注意,日期时间本质上是一个整数之上的格式,整数不能是一半有效,一半不能丢失(下面再说一点)。

无论如何,我只会制作一个新的专栏,而不是包含NaN。 从以下开始,其中'raw_dt'是您的原始数据,'formatted_dt'是正确的日期时间:

                   raw_dt        formatted_dt
0  12/31/2006 11:20:00 PM 2006-12-31 23:20:00
1  12/31/2006 11:30:00 PM 2006-12-31 23:30:00
...
7   12/31/2006 4:45:00 PM 2006-12-31 16:45:00
8  12/31/2006 11:50:00 PM 2006-12-31 23:50:00
9              01/01/2007 2007-01-01 00:00:00

我会创建一个面具,像这样:

df['valid_time'] = df.raw_dt.str.contains(':')

哪个应该在这里工作正常,你可以使用正则表达式,如果你需要更复杂的东西。 然后创建一个新的时间列。

df['time'] = df.ix[df['valid_time'],'formatted_dt'].dt.time

                   raw_dt        formatted_dt valid_time      time
0  12/31/2006 11:20:00 PM 2006-12-31 23:20:00       True  23:20:00
1  12/31/2006 11:30:00 PM 2006-12-31 23:30:00       True  23:30:00
...
7   12/31/2006 4:45:00 PM 2006-12-31 16:45:00       True  16:45:00
8  12/31/2006 11:50:00 PM 2006-12-31 23:50:00       True  23:50:00
9              01/01/2007 2007-01-01 00:00:00      False       NaN

从那里你可以格式化你喜欢的格式,例如:

df.formatted_dt.dt.date.map(str) + df.time.map(str).str.rjust(9)

0    2006-12-31 23:20:00
1    2006-12-31 23:30:00
...
7    2006-12-31 16:45:00
8    2006-12-31 23:50:00
9    2007-01-01      nan

要简要介绍一下日期时间,请看一下这里,并注意你可以看一下这个日期时间到底是什么时候(1970年1月1日以来的纳秒):

df.formatted_dt.astype(np.int64)

0    1167607200000000000
1    1167607800000000000
...
7    1167583500000000000
8    1167609000000000000
9    1167609600000000000

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM