Не удается вставить фрейм данных pandas в mongo — не удается закодировать объект: массив ([], dtype=int64), типа:

#python #pandas #mongodb #numpy #pymongo

#python #pandas #mongodb #numpy #pymongo

Вопрос:

введите описание изображения здесь

Вот первые 5 строк results_df фрейма данных, которые мы пытаемся вставить в пустую коллекцию MongoDB, используя db['our-empty-collection'].insert_many(results_df.to_dict('records')) . Предположительно, из-за последнего competitionIds столбца, который представляет собой массив целых чисел, мы получаем ошибку: cannot encode object: array([], dtype=int64), of type: <class 'numpy.ndarray'> . Некоторые наблюдения:

  • На самом insert_many деле работает с моего локального компьютера, но сбой в нашем контейнере docker.
  • На моем локальном компьютере, pymongo.__version__ == '3.10.1' , и pd.__version__ == '0.25.3'
  • В контейнере docker, pymongo.__version__ == '3.11.1' , и pd.__version__ == '0.25.3'

…таким образом, единственное различие в версии библиотеки заключается в том, что локальная машина, на которой работает вставка, имеет немного более старую версию pymongo . Возможно, есть проблема с типами int64 внутри массива?, потому что Mongo отлично обрабатывает вложенные данные, и я не понимаю, почему столбец массива в pandas может вызвать эту проблему при вставке?

Редактировать: в Mongo competitionIds это массив значений int32, поэтому, возможно int64 , проблема заключается в части, а не в части массива. Все еще странно, что разница между локальной машиной и контейнером docker.

Edit2: обновил local pymongo до версии 3.11.1, чтобы соответствовать версии контейнера docker, insert_many() снова запустился на моем локальном компьютере, и он снова работал на моем локальном компьютере

Edit3: похоже, проблема в numpy.dnarray (в контейнере docker) против списка (на локальном компьютере) … возможно, проблема с версией библиотеки python GCP / bigquery при запросе данных. Я обновил версию bigquery на локальном компьютере до 1.25.0, чтобы соответствовать версии docker-контейнера, однако по-прежнему получаю разные типы для competitionIds столбца.

введите описание изображения здесь