将数据转储到pandas df中

问题描述 投票:0回答:2

我试图通过弹性搜索获得超过10,000个观察并将其转储到pandas数据框中: -

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

我想把它转换成如下的熊猫数据框: - qazxsw poi

python python-3.x pandas elasticsearch
2个回答
0
投票

我可以建议你一个更好的方法来做到这一点..我猜你试图获得超过10,000条记录..尝试以下方式,你将获得数百万条记录:: -

首先安装

enter image description here

1.)定义您的客户

from elasticsearch_dsl import Search

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

3.)检查总命中数

search = Search(using=client)

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

5.)写下你的查询

s = Search(using=client)

6.)使用扫描将数据转储到数据框中...扫描会将所有数据转储到您的数据框中,即使它数​​十亿也要小心。

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

7.)看看你的数据框和微笑:)

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

0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.