#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
столбца.