Как создать фрейм данных и записать новую строку в него?
Получаю данные и обрабатываю их. Данные приходят в виде словаря, где ключ это заголовок столбца, а значение - строки в нем. Есть скрипт, который делает запросы и получает в ответ новые данные, теже ключи но новые значения.
Проблема в том, что при каждом получении ответа, фрейм данных обновляет или перезаписывает одну единственную строку, не добавляя в него новую строку.
Что можно сделать, чтобы добавлялись во фрейм данных новые строки при получении ответа? И как реализовать все это?
Мой код :
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 шт):
Чтобы добавить к одному фрейму другой с таким же набором столбцов можно воспользоваться:
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 = []