如何使用 python 清理列并转换为日期时间

How to clean columns & convert to datetime using python

我正在将我的数据从 JSON 解析到以下 DataFrame,但我无法从 readingtime 列中删除多余的内容并将其转换为日期时间格式

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

我尝试使用替换,lstring-rstring,但我无法替换 thr readingtime 列中的额外字符

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

尝试使用 ast 模块。使用 ast.literal_eval() 将 readingtime 列转换为字典,然后从您刚刚创建的字典中调用键“$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 现在包含准备好用日期时间转换的纯日期字符串。

马辛兹

假设 da2['reading_time] return 是一个字典,

da2['reading_time]['$date'] 

将 return 您的值,即 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]

您可以将 lambda 函数应用于数据框的列,通过 x['$date'] 从字典中提取日期,然后只取 date/time 部分(忽略时间偏移)。由于这是一个 'datetime naive' 对象,Python 不知道如何处理任何时区调整。使用这个剥离的 date/time 字符串(例如 '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]