Я хочу вставить панду DataFrame в MongoDB.Однако, когда я это делаю, столбец timestamp
(, который является index_coloumn
кадра данных ) не вставляется в MongoDB.
Ниже приведен мой код псевдокода, который воспроизводитПроблема:
from datetime import datetime
import pandas as pd
from pymongo import MongoClient
client = MongoClient('localhost', 27017)
db = client.ticks
collection = db.STOCK
collection_ohlc = db.STOCK_ohlc
# Read per second ticks data from Mongo into a dataframe
results = collection.find(
{'timestamp': {'$gte': '2019-01-24T09:15:00', '$lte': '2019-01-24T09:19:59'}})
df = pd.DataFrame(list(results))
# Convert per second ticks data into 1 Minute OHLC Candle
df['timestamp'] = pd.to_datetime(df['timestamp'], errors='coerce')
df.set_index('timestamp', inplace=True)
ohlc_data = df['ltp'].resample('5min').ohlc()
# Print OHLC candle dataframe
print(ohlc_data)
# Write the OHLC candle back to Mongo into a new collection STOCK_ohlc
collection_ohlc.insert_many(ohlc_data.to_dict('records'))
Вот результат вышеприведенного print(ohlc_data)
оператора:
open high low close
timestamp
2019-01-24 09:15:00 286.55 286.7 285.5 285.65
Теперь код работает нормально и значения ohlc
вставляются в MongoDB.Однако столбец timestamp
отсутствует.
Ниже представлен MongoShell, в котором перечислены вставленные записи:
> db.STOCK_ohlc.find()
{ "_id" : ObjectId("5c6abc6f4994a1bc8c3c08fd"), "open" : 286.55, "high" : 286.7, "low" : 285.5, "close" : 285.65 }
>
Как мы видим, отметка времени отсутствует в вставленной записи выше.Это бесполезно, если отсутствует отметка времени.
Я пробовал различные orient
, как указано в pandas.DataFrame.to_dict
, но ни одна из них, похоже, не вставляется в MongoDB.Единственный orient
, который вставляет данные, это records
, но тогда он пропускает timestamp
.
Любые указатели будут очень полезны.
ОБНОВЛЕНИЕ: Вотвыход print(ohlc_data.to_dict('records'))
[{'open': 286.55, 'high': 286.7, 'low': 285.5, 'close': 285.65}]