【发布时间】:2013-12-08 15:38:17
【问题描述】:
使用 PyMongo 将 pandas DataFrame 插入 mongodb 的最快方法是什么?
尝试
db.myCollection.insert(df.to_dict())
报错
InvalidDocument: documents must have only string keys, the key was Timestamp('2013-11-23 13:31:00', tz=None)
db.myCollection.insert(df.to_json())
报错
TypeError: 'str' object does not support item assignment
db.myCollection.insert({id: df.to_json()})
报错
InvalidDocument: documents must have only string a keys, key was <built-in function id>
df
<class 'pandas.core.frame.DataFrame'>
DatetimeIndex: 150 entries, 2013-11-23 13:31:26 to 2013-11-23 13:24:07
Data columns (total 3 columns):
amount 150 non-null values
price 150 non-null values
tid 150 non-null values
dtypes: float64(2), int64(1)
【问题讨论】:
-
之后你想做什么?你想要每条记录一个文档还是每个数据帧一个文档?
-
每个 mongo 记录都将包含
date、amount、price和 tid 字段。tid应该是唯一字段 -
您可以通过
records = json.loads(df.to_json(orient='records'))将数据帧转换为dict-list,结果将是:[{'c1': 1, 'c2': 1},{'c1': 2, 'c2': 2},{'c1': 3, 'c2': 3}],然后只需使用db.coll.insert_many(records)。顺便说一句,使用df.to_dict('recoreds')可能会反击Type error
标签: python mongodb python-2.7 pandas pymongo