将数据转储到熊猫df中

时间:2018-08-29 13:26:13

标签: python python-3.x pandas elasticsearch

我正试图从弹性搜索中获得10,000多个观察结果并将其转储到熊猫数据框中:-

es_index = "logstash-2018.08.26"
documento = "your_doc_type"


body = {"from": 0, "size": 100,
    "query": {
        "constant_score" : {
            "filter" : {
                 "bool" : {
                    "must" : [{
              "range": {"@timestamp" : {
                "gte": "2018-08-26T14:00:08.000Z", 
                "lte": "2018-08-26T16:00:00.000Z"

            }}
          }],
                   "filter": [
                        {"term"  :{"type" :"vx_apache_json"}},
                        {"term"  :{"api" :"viv_signin.php"}},
                        {"term"  :{"domain":"fnwp"}}




                   ]
                 }}}}}

res = helpers.scan(
                client = es,
                scroll = '2s',
                query = body, 
                index = es_index)

当我试图获得res的价值时,我就得到

<generator object scan at 0x10c89a938>

当我使用以下代码时。.

for i in res:
 print(i)

我正在获取以下格式的数据

enter image description here

我想将其转换为如下所示的熊猫数据框: enter image description here

2 个答案:

答案 0 :(得分:0)

将所有数据存储在变量中,然后使用pd.DataFrame(YourVariable)将该变量转换为数据帧。

答案 1 :(得分:0)

我可以建议您一种更好的方法。.我猜您正在尝试获取10,000条以上的记录。.尝试以下方法,您还将获得数百万条记录::-

首次安装

from elasticsearch_dsl import Search

1。)定义您的客户

client = Elasticsearch(['http://localhost:9200'])

2。)search = Search(using=client)

3。)检查总点击数

results = search.execute()
results.hits.total

4。)s = Search(using=client)

5。)写下您的查询

s = s.query(..write your query here...)

6。)使用scan将数据转储到数据框中... Scan会将所有数据转储到您的数据框中,即使它以十亿计也是如此。

results_df = pd.DataFrame((d.to_dict() for d in s.scan()))

7。)看一下数据框并微笑:)

results_df