如何清洁柱子和使用python

时间:2015-06-20 06:35:10

标签: python datetime pandas data-cleaning

我将我的数据从JSON解析为跟随DataFrame,但我无法从阅读时间栏中删除额外的内容。将其转换为日期时间格式

                        readingtime                      deviceId  
0  {u'$date': u'2014-11-04T17:27:50.000+0000'}           1224EG12

我尝试使用replace,lstring-rstring但是我无法替换thr阅读时间列中的额外字符

da2['readingtime2'] = da2['readingtime'].str.replace('date', '') 


data['readingtime'] = data['readingtime'].map(lambda x: str(x)[13:])

尝试了loc,但没有收到错误

已编辑:

我想要最终的阅读时间 ' 2014-11-04 17:27:50.000 + 000' 我要转换为datetime - yyyy-mm-dd hh:mm:ss.mils + UTC

3 个答案:

答案 0 :(得分:1)

尝试使用ast模块。使用ast.literal_eval()将阅读时间列转换为dict,然后从刚刚创建的字典中调用“$ date”键。

import ast

readingtime = "{u'$date': u'2014-11-04T17:27:50.000+0000'}"
da2 = ast.literal_eval(readingtime)
dat = da2['$date']

print(dat)

dat现在包含准备与datetime一起转换的纯日期字符串。

MarcinZ

答案 1 :(得分:1)

假设da2 ['reading_time]返回一个字典,

da2['reading_time]['$date'] 

将返回您的值,即2014-11-04 17:27:50.000 +000

另一种方法可能是:

start_index = da2['reading_time'].__str__().index(':') + 3
end_index = da2['reading_time'].__str__().index('}') - 1
date = da2['reading_time'].__str__()[start_index:end_index]

答案 2 :(得分:1)

您可以将lambda函数应用于数据框的列,通过x['$date']从字典中提取日期,然后只取日期/时间部分(忽略时间偏移)。由于这是一个'datetime naive'对象,Python不知道如何处理任何时区调整。使用此剥离的日期/时间字符串(例如'2014-11-04T17:27:50.000')作为strptime的输入。

import datetime as dt

df = pd.DataFrame({'deviceId': {0: '1224EG12', 1: '1224EG13'},
 'readingtime': {0: {u'$date': u'2014-11-04T17:27:50.000+0000'},
  1: {u'$date': u'2014-11-04T17:27:50.000+0000'}}})

>>> df
   deviceId                                  readingtime
0  1224EG12  {u'$date': u'2014-11-04T17:27:50.000+0000'}
1  1224EG13  {u'$date': u'2014-11-04T17:27:50.000+0000'}


>>> df.readingtime.apply(lambda x: dt.datetime.strptime(x['$date'][:-7], 
                                                        '%Y-%m-%dT%H:%M:%S.%f')) 
0   2014-11-04 17:27:50
1   2014-11-04 17:27:50
Name: readingtime, dtype: datetime64[ns]