通过python将日期时间戳发送到elasticsearch

时间:2017-03-27 16:39:08

标签: python python-3.x pandas elasticsearch

我的5列数据中有3列是pandas to_datetime格式:

col1                 col2                col3                col4            a           
2017-01-01 21:07:57  2017-01-01 21:07:58 2017-01-01 21:07:59 misc_text_data  text
2017-01-01 21:07:42  2017-01-01 21:07:48 2017-01-01 21:07:49 misc_test_data  text2
2017-01-01 21:07:33  2017-01-01 21:07:22 2017-01-01 21:07:21 mist_test_fata  fext3

如何通过elasticsearch.py​​字段将数据发送到elasticsearch?

我正在尝试使用elasticsearch将格式识别为时间戳,以便我可以从这些日期进行时间线分析。

我目前正在发送下面的数据而不承认时间:

mylist = []
for doc in df_json:
    doc['tag'] = "mytags"
    action = { "_index":"myindexoftimes", "_type": "mytimes", "_source":doc}
    mylist.append(action)

helpers.bulk(es, mylist)

任何帮助都会有所帮助。谢谢。

1 个答案:

答案 0 :(得分:2)

不确定代码中的问题是什么,可能与时间戳格式有关。

无论如何选择了iso格式的panda to_json对我有用:

import pandas as pd
from elasticsearch import Elasticsearch
import json

es = Elasticsearch()

data = ["2017-01-01 21:07:57,  2017-01-01 21:07:58, 2017-01-01    21:07:59, misc_text_data,  text".split(','),
    "2017-01-01 21:07:42,  2017-01-01 21:07:48, 2017-01-01 21 07:49, misc_test_data,  text2".split(','),
    "2017-01-01 21:07:33,  2017-01-01 21:07:22, 2017-01-01 21 07:21, misc_test_fata,  fext3".split(',')]

df = pd.DataFrame(data,columns = ['col1','col2','col3','col4','a'])
for col in ['col1','col2','col3']:
df[col] = pd.to_datetime(df[col])

jsons = json.loads(df.to_json(orient='records',date_format='iso'))

for j in jsons:
    j['injection_timestamp'] = pd.to_datetime('now')
    es.index(index="test33", doc_type='time_text', body=j)