Я пытаюсь вставить фрейм данных в MongoDB. Каждая строка должна быть одним документом.
from pymongo import MongoClient
import pandas as pd
client = MongoClient()
col = client['test']['test']
d = {'name': ['Braund', 'Cummings', 'Heikkinen', 'Allen'],
'age': [22,38,26,35],
'fare': [7.25, 71.83, 0 , 8.05],
'survived?': [False, True, True, False]}
df = pd.DataFrame(d)
col.insert_many(df)
Однако приведенный выше код возвращает ошибку: ValueError: The truth value of a DataFrame is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all()..
Изменение col.insert_many(df) на col.insert_many(df.to_dict()) или col.insert_many(df.to_json()) вызывает TypeError: document must be an instance of dict, bson.son.SON, bson.raw_bson.RawBSONDocument, or a type that inherits from collections.MutableMapping






Вы были очень близки, мы можем повторно использовать ваш код.
Обратите внимание, мы по-прежнему используем pymongo.MongoClient и pandas.DataFrame.to_dict, с добавлением одного параметра в последний.
to_dict(orient='records')
тогда у нас было бы
from pymongo import MongoClient
import pandas as pd
client = MongoClient() # Remember your uri string
col = client['test']['test']
df = pd.DataFrame({'name': ['Braund','Cummings','Heikkinen','Allen'],
'age': [22,38,26,35],
'fare': [7.25, 71.83, 0 , 8.05],
'survived?': [False, True, True, False]})
data = df.to_dict(orient='records') # Here's our added param..
col.insert_many(data)
Короче говоря, при указании orient='records' вывод представляет собой список dicts, в том же формате, что и insert_many. Кроме того, в качестве бонуса - to_dict лучше справляется со столбцами типа datetime по сравнению с to_json!
попробуйте это:
col.insert_many(df.to_dict('r'))