mongodb python导入csv

mongodb python导入csv,python,mongodb,Python,Mongodb,我正在尝试将csv导入Mongodb,然后从Mongodb执行命令以获取数据 这是我的密码 import pandas as pd from pymongo import MongoClient client = MongoClient() db = client.test # client.database_name collection = db.test #db.collection_name def csv_to_json(filename, header=None): d

我正在尝试将csv导入Mongodb,然后从Mongodb执行命令以获取数据

这是我的密码

import pandas as pd
from pymongo import MongoClient

client = MongoClient()
db = client.test # client.database_name
collection = db.test #db.collection_name


def csv_to_json(filename, header=None):
    data = pd.read_csv(filename, header=header)
    return data.to_dict('records')

collection.insert_many(csv_to_json('test.csv'))
然而,我有这个错误。到底出了什么问题

    operation, command, docs, check_keys, ack, opts, ctx)

InvalidDocument: documents must have only string keys, key was 0
默认情况下,
read\u csv()
将从零开始索引数据帧行和列。然后,to_dict()方法将创建具有数字键的dict列表。MongoDB中不允许使用数字键;因此,你看到的问题

因此,假设您的csv文件如下所示:

Field1,Field2
a,x
b,y
c,z
那么,您需要做的唯一更改是:

collection.insert_many(csv_to_json('test.csv', header=0))
这将告诉pandas基于标题行创建索引,标题行将成为文档中每个字段的键

pprint.pprint(list(collection.find({}, {'_id': 0})))
给出:

[{'Field1': 'a', 'Field2': 'x'},
 {'Field1': 'b', 'Field2': 'y'},
 {'Field1': 'c', 'Field2': 'z'}]