Как создать фрейм данных и записать новую строку в него?

Получаю данные и обрабатываю их. Данные приходят в виде словаря, где ключ это заголовок столбца, а значение - строки в нем. Есть скрипт, который делает запросы и получает в ответ новые данные, теже ключи но новые значения.

Проблема в том, что при каждом получении ответа, фрейм данных обновляет или перезаписывает одну единственную строку, не добавляя в него новую строку.

Что можно сделать, чтобы добавлялись во фрейм данных новые строки при получении ответа? И как реализовать все это?

Мой код :

tempo = time.time() + 1000000000
while time.time() < tempo:
    symbol_info = mt5.symbol_info('@CLE')
    if symbol_info != None:
        symbol_info_dict = mt5.symbol_info('@CLE')._asdict()
        df = pd.DataFrame([symbol_info_dict])

Вывод :

[1 rows x 96 columns]
   custom  chart_mode  select  visible  ...  isin  name  page                   path
0   False           1    True     True  ...        @CLE        Exchange-Futures\@CLE

Ну а вообще пытаюсь все это сделать для сбора данных. Далее, хочу поставить это все на запись для последующего анализа. Если у кого есть варианты, или опыт в записи большого кол-ва данных, буду рад видеть ваш код и перинять ваш опыт.


Ответы (1 шт):

Автор решения: MaxU

Чтобы добавить к одному фрейму другой с таким же набором столбцов можно воспользоваться:

  1. df1 = df1.append(df2)
  2. df1 = pd.concat([df1, df2])

NOTE: объединение фреймов достаточно медленная операция! Поэтому разработчики Pandas рекомендуют собирать массив данных и по окончанию сбора создавать DataFrame из собранных данных. Такой подход будет быстрее работать и будет расходовать меньше памяти (при правильной реализации).

Как добавить одну строку к DataFrame

Ну а вообще пытаюсь все это сделать для сбора данных, далее хочу поставить это все на запись для последующего анализа. Если у кого есть варианты, или опыт в записи большого кол-ва данных, буду рад видеть ваш код и принять опыт от вас.

Для хранения большого кол-ва данных придумали базы данных.

import sqlite3
import pandas as pd

db_filename = "/tmp/db.sqlite"

row_count = 0
batch_size = 10000
data = []

db_conn = sqlite3.connect(db_filename)

while time.time() < tempo:
    symbol_info = mt5.symbol_info('@CLE')
    if symbol_info:        
        data.append(symbol_info._asdict())
        row_count += 1
        if row_count == batch_size:
            df = pd.DataFrame(data)
            df.to_sql("data", db_conn, if_exists="append")
            row_count = 0
            data = []
→ Ссылка