我正在将我的数据从JSON解析到以下数据帧,但我无法从阅读时间列中删除多余的内容并将其转换为日期时间格式
readingtime deviceId
0 {u'$date': u'2014-11-04T17:27:50.000+0000'} 1224EG12
我尝试使用替换,lstring-rstring,但我无法替换阅读时间列中的额外字符
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'我想转换为日期时间 - yyyy-mm-dd hh:mm:ss.mils +UTC
您可以将lambda函数应用于数据框的列,通过x['$date']
从字典中提取日期,然后只获取日期/时间部分(忽略时间偏移量)。 由于这是一个"日期时间朴素"对象,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]
假设 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]
尝试使用ast模块。使用 ast.literal_eval() 将阅读时间列转换为字典,然后从刚刚创建的字典中调用键"$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 现在包含准备使用日期时间转换的纯日期字符串。
马尔钦兹