如何使用 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]
我正在将我的数据从 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]