我将我的数据从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
答案 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]