Ner*_*ine 6 python datetime pandas
我目前正在使用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**
Run Code Online (Sandbox Code Playgroud)
*我使用了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**
Run Code Online (Sandbox Code Playgroud)
使用的代码:
## 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())
Run Code Online (Sandbox Code Playgroud)
如果没有在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**
Run Code Online (Sandbox Code Playgroud)
希望有办法完成这项工作.
我不相信有任何方法可以拥有一个部分有效、部分 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
Run Code Online (Sandbox Code Playgroud)
我会创建一个面具,像这样:
df['valid_time'] = df.raw_dt.str.contains(':')
Run Code Online (Sandbox Code Playgroud)
在这里应该可以正常工作,如果您需要更复杂的东西,您可以使用正则表达式。然后创建一个新的时间列。
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
Run Code Online (Sandbox Code Playgroud)
从那里您可以按照自己喜欢的方式格式化,例如:
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
Run Code Online (Sandbox Code Playgroud)
要简要扩展日期时间是什么,请查看此处并注意,您可以通过这样做来了解日期时间的真正含义(自 1970 年 1 月 1 日起的纳秒):
df.formatted_dt.astype(np.int64)
0 1167607200000000000
1 1167607800000000000
...
7 1167583500000000000
8 1167609000000000000
9 1167609600000000000
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
755 次 |
| 最近记录: |