带有嵌套值的pymongo游标到数据框中

pymongo cursor with nested values into dataframe

我有以下 pymongo 游标:

{'_id': ObjectId('61d7088333a0edbcbdc7332f'), 'TICKET_ID': {'0': '35592159', '1': '35592159', '2': '35592159', '3': '35592159', '4': '35592159'}, 'MOIS_VENTE': {'0': '10', '1': '10', '2': '10', '3': '10', '4': '10'}, 'PRIX_NET': {'0': '1.67', '1': '1.66', '2': '7.45', '3': '5.95', '4': '1.67'}, 'FAMILLE': {'0': 'HYGIENE', '1': 'HYGIENE', '2': 'SOINS DU VISAGE', '3': 'SOINS DU VISAGE', '4': 'HYGIENE'}, 'UNIVERS': {'0': 'HYG_DOUCHE JARDINMONDE', '1': 'HYG_DOUCHE JARDINMONDE', '2': 'VIS_CJOUR Jeunes Specifique', '3': 'VIS_DEMAQ AAAR', '4': 'HYG_DOUCHE JARDINMONDE'}, 'MAILLE': {'0': 'HYG_JDM', '1': 'HYG_JDM', '2': 'VIS_JEUNE_ET_LEVRE', '3': 'VIS_AAAR_DEMAQLOTION', '4': 'HYG_JDM'}, 'LIBELLE': {'0': 'GD JDM4 PAMPLEMOUSSE FL 200ML', '1': 'GD JDM4 PAMPLEMOUSSE FL 200ML', '2': 'CR JR PARF BIO.SPE AC.SENT.50ML', '3': 'EAU MICELLAIRE 3 THES FL200ML', '4': 'GD JDM4 TIARE FL 200ML'}, 'CLI_ID': {'0': '1490281', '1': '1490281', '2': '1490281', '3': '1490281', '4': '1490281'}}

我想从上面的光标制作以下数据框:

    TICKET_ID   MOIS_VENTE  PRIX_NET    FAMILLE             UNIVERS                        MAILLE                 LIBELLE                           CLI_ID
0   35592159    10          1.67        HYGIENE             HYG_DOUCHE JARDINMONDE         HYG_JDM  GD            JDM4 PAMPLEMOUSSE FL 200ML        1490281
1   35592159    10          1.66        HYGIENE             HYG_DOUCHE JARDINMONDE         HYG_JDM  GD            JDM4 PAMPLEMOUSSE FL 200ML        1490281
2   35592159    10          7.45        SOINS DU VISAGE     VIS_CJOUR Jeunes Specifique    VIS_JEUNE_ET_LEVRE     CR JR PARF BIO.SPE AC.SENT.50ML   1490281
3   35592159    10          5.95        SOINS DU VISAGE     VIS_DEMAQ AAAR                 VIS_AAAR_DEMAQLOTION   EAU MICELLAIRE 3 THES FL200ML     1490281
4   35592159    10          1.67        HYGIENE             HYG_DOUCHE JARDINMONDE         HYG_JDM  GD            JDM4 TIARE FL 200ML               1490281

我尝试了以下方法,但结果不是我所期望的...

fields = ['TICKET_ID', 'MOIS_VENTE', 'PRIX_NET', 'FAMILLE', 'UNIVERS', 'MAILLE', 'LIBELLE','CLI_ID']
r = pd.DataFrame(list(cursor), columns = fields)
r

提前感谢您的建议!

由于您的所有数据都在一条记录中,因此默认使用 find_one() 作为 returns 和 dict。然后您可以将 dict 传递给 pandas 而无需其他选项,您的数据框将按照您的需要构建。

import pandas as pd
from pymongo import MongoClient
# Load some test data
db = MongoClient()['mydatabase']['mycollection']
db.insert_one({'TICKET_ID': {'0': '35592159', '1': '35592159', '2': '35592159', '3': '35592159', '4': '35592159'}, 'MOIS_VENTE': {'0': '10', '1': '10', '2': '10', '3': '10', '4': '10'}, 'PRIX_NET': {'0': '1.67', '1': '1.66', '2': '7.45', '3': '5.95', '4': '1.67'}, 'FAMILLE': {'0': 'HYGIENE', '1': 'HYGIENE', '2': 'SOINS DU VISAGE', '3': 'SOINS DU VISAGE', '4': 'HYGIENE'}, 'UNIVERS': {'0': 'HYG_DOUCHE JARDINMONDE', '1': 'HYG_DOUCHE JARDINMONDE', '2': 'VIS_CJOUR Jeunes Specifique', '3': 'VIS_DEMAQ AAAR', '4': 'HYG_DOUCHE JARDINMONDE'}, 'MAILLE': {'0': 'HYG_JDM', '1': 'HYG_JDM', '2': 'VIS_JEUNE_ET_LEVRE', '3': 'VIS_AAAR_DEMAQLOTION', '4': 'HYG_JDM'}, 'LIBELLE': {'0': 'GD JDM4 PAMPLEMOUSSE FL 200ML', '1': 'GD JDM4 PAMPLEMOUSSE FL 200ML', '2': 'CR JR PARF BIO.SPE AC.SENT.50ML', '3': 'EAU MICELLAIRE 3 THES FL200ML', '4': 'GD JDM4 TIARE FL 200ML'}, 'CLI_ID': {'0': '1490281', '1': '1490281', '2': '1490281', '3': '1490281', '4': '1490281'}})
# Fetch the data from MongoDB
data = db.find_one({}, {'_id': 0})
df = pd.DataFrame(data)
# Pretty up the output
pd.options.display.max_columns = None
pd.options.display.width = None
print(df)

打印:

  TICKET_ID MOIS_VENTE PRIX_NET          FAMILLE                      UNIVERS                MAILLE                          LIBELLE   CLI_ID
0  35592159         10     1.67          HYGIENE       HYG_DOUCHE JARDINMONDE               HYG_JDM    GD JDM4 PAMPLEMOUSSE FL 200ML  1490281
1  35592159         10     1.66          HYGIENE       HYG_DOUCHE JARDINMONDE               HYG_JDM    GD JDM4 PAMPLEMOUSSE FL 200ML  1490281
2  35592159         10     7.45  SOINS DU VISAGE  VIS_CJOUR Jeunes Specifique    VIS_JEUNE_ET_LEVRE  CR JR PARF BIO.SPE AC.SENT.50ML  1490281
3  35592159         10     5.95  SOINS DU VISAGE               VIS_DEMAQ AAAR  VIS_AAAR_DEMAQLOTION    EAU MICELLAIRE 3 THES FL200ML  1490281
4  35592159         10     1.67          HYGIENE       HYG_DOUCHE JARDINMONDE               HYG_JDM           GD JDM4 TIARE FL 200ML  1490281