elasticsearch,dataframe,Python,Json,Pandas,elasticsearch,Dataframe" /> elasticsearch,dataframe,Python,Json,Pandas,elasticsearch,Dataframe" />

Python pandas to_json以双引号输出,以馈送至Elasticsearch

Python pandas to_json以双引号输出,以馈送至Elasticsearch,python,json,pandas,elasticsearch,dataframe,Python,Json,Pandas,elasticsearch,Dataframe,Pandas DataFrame的to_json方法正确返回数据。但我无法在下一步处理它。例如 try: from StringIO import StringIO except ImportError: from io import StringIO myst=""" 20-01-17 pizza 90 21-01-17 pizza 120 22-01-17 pizza 239 23-01-17 pizza 200 20-01-17

Pandas DataFrame的
to_json
方法正确返回数据。但我无法在下一步处理它。例如

try:
    from StringIO import StringIO
except ImportError:
    from io import StringIO

myst="""
20-01-17    pizza   90
21-01-17    pizza   120
22-01-17    pizza   239
23-01-17    pizza   200
20-01-17    fried-rice  100
21-01-17    fried-rice  120
22-01-17    fried-rice  110
23-01-17    fried-rice  190
20-01-17    ice-cream   8
21-01-17    ice-cream   23
22-01-17    ice-cream   21
23-01-17    ice-cream   100
"""
u_cols=['date', 'product', 'sales']

myf = StringIO(myst)
import pandas as pd
df = pd.read_csv(StringIO(myst), sep='\s+', names = u_cols)
下一步是将数据导出到JSON,以便在Elasticsearch中导入

tmp=df.to_json(orient="records")
import json
json.loads(tmp)
这将返回以下(无效JSON)输出:


弹性似乎不喜欢单引号。如何在双引号中获得与上述相同的输出?

不确定是否有帮助,但在代码后面添加了与

from elasticsearch import Elasticsearch
from elasticsearch.helpers import bulk

es = Elasticsearch()

actions = [
     {
     '_index' : 'transactions',
     '_type' : 'content',
     '_date' : rec['date'],
     '_product' : rec['product'],
     '_sales' : rec['sales'],
     }
for rec in json.loads(tmp)
]

bulk(es, actions)

应允许创建索引。

@shantanuo;问题可能是因为您正在传递dict对象列表。能否尝试传递json.loads(a)[0]?@Cleb它应该返回有效的json(双引号而不是单引号)
from elasticsearch import Elasticsearch
from elasticsearch.helpers import bulk

es = Elasticsearch()

actions = [
     {
     '_index' : 'transactions',
     '_type' : 'content',
     '_date' : rec['date'],
     '_product' : rec['product'],
     '_sales' : rec['sales'],
     }
for rec in json.loads(tmp)
]

bulk(es, actions)