我从.json
文件与熊猫DataFrame
导入数据,结果是有点破:熊猫数据框中的日期和时间,从JSON格式
>> print df
summary response_date
8.0 {u'$date': u'2009-02-19T10:54:00.000+0000'}
11.0 {u'$date': u'2009-02-24T11:23:45.000+0000'}
14.0 {u'$date': u'2009-03-03T17:55:07.000+0000'}
16.0 {u'$date': u'2009-03-10T12:23:04.000+0000'}
19.0 {u'$date': u'2009-03-17T17:19:55.000+0000'}
13.0 {u'$date': u'2009-03-25T15:10:52.000+0000'}
22.0 {u'$date': u'2009-04-02T16:57:31.000+0100'}
15.0 {u'$date': u'2009-04-08T22:29:09.000+0100'}
20.0 {u'$date': u'2009-04-16T18:14:20.000+0100'}
13.0 {u'$date': u'2009-04-29T10:47:06.000+0100'}
15.0 {u'$date': u'2009-05-06T13:45:45.000+0100'}
20.0 {u'$date': u'2009-05-26T10:41:52.000+0100'}
如何摆脱“日期”和其他乱七八糟的用日期和时间创建一个正常的列。为了从ISO8601格式转换我通常使用:
df.response_date = pd.to_datetime(df.response_date)
更新1
summary response_date closed_date open_date
24.0 2011-10-15T00:00:00.000+0100 NaN NaN
24.0 2011-11-24T09:00:00.000+0000 NaN NaN
19.0 2011-10-01T09:00:00.000+0100 NaN NaN
25.0 2011-10-29T09:00:00.000+0100 NaN NaN
19.0 2011-10-08T09:00:00.000+0100 NaN NaN
-1.0 2011-11-09T17:20:00.000+0000 {u'$date': u'2011-11-16T15:20:00.000+0000'} {u'$date': u'2011-11-09T15:20:00.000+0000'}
-1.0 2011-11-16T17:20:00.000+0000 {u'$date': u'2011-11-23T15:20:00.000+0000'} {u'$date': u'2011-11-16T15:20:00.000+0000'}
-1.0 2011-11-23T17:20:00.000+0000 {u'$date': u'2011-11-30T15:20:00.000+0000'} {u'$date': u'2011-11-23T15:20:00.000+0000'}
-1.0 2011-11-30T17:20:00.000+0000 {u'$date': u'2011-12-07T15:20:00.000+0000'} {u'$date': u'2011-11-30T15:20:00.000+0000'}
因此,
>> df.response_date = pd.DataFrame(df.response_date.values.tolist())
完美地工作,但其他列包含NaN值,并与插补“-1”没有帮助。
>> print type(df.ix[0,'scheduleClosedAt'])
<type 'int'>
更新2
为什么这个(屏蔽)方法不起作用?
>> df.reset_index(inplace=True)
>> indx_nan_closed = df.closed_date.isnull()
>> df[~indx_nan_closed].closed_date = pd.DataFrame(df[~indx_nan_closed].closed_date.values.tolist())
这条线相当于一个在上面,但与掩蔽阵列,所以想要这种方法仅适用于非NaN值,但结果是,我的数据帧“DF”保持不变。这很奇怪。
有什么想法?
什么是'打印类型(df.ix [ 0,'response_date')'? – jezrael
@jezrael –