熊猫-将数据框插入MongoDB

Mun*_*ong 3 python mongodb pandas

我正在尝试将数据框插入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)
Run Code Online (Sandbox Code Playgroud)

但是,以上代码返回错误: 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

Fri*_*ich 9

您非常亲密,我们可以重用您的代码。

注意,我们仍然使用pymongo.MongoClientpandas.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)
Run Code Online (Sandbox Code Playgroud)

简而言之,通过指定orient='records'输出为dict列表,即接受的相同格式insert_many。另外,作为奖励- to_dictto_json!相比,使用datetime类型的列效果更好!