Как мне найти указанный c документ insert_many () не работает? - PullRequest
0 голосов
/ 05 августа 2020
if (constant.gc in file.sheet_names):
            coll = db[constant.gc]
            print("Adding to " + constant.gc + " database")
            df = file.parse(constant.gc)
            df = clean(df)
            data_dict = df.to_dict('r')
            try:
                result = coll.insert_many(data_dict)
                nr_inserts = len(result.inserted_ids)
                print(str(nr_inserts) + "Cases added to database")
            except pymongo.errors.BulkWriteError as bwe:
                nr_inserts = bwe.details["nInserted"]
                print(nr_inserts)

Я все время получаю ошибку NaTType и не могу найти, какая строка фрейма данных имеет пустую дату. К сожалению, это не файл Excel с 39 КБ строк. Так что простое просмотрение не поможет. Я пробовал, за исключением того, что теоретически мог сказать мне, сколько было успешно вставлено до ошибки, и поэтому дал мне подсказку, где искать, но он не напечатан.

Ошибка выглядит так:

Exception in Tkinter callback
Traceback (most recent call last):
  File "C:\Python38\lib\tkinter\__init__.py", line 1883, in __call__
    return self.func(*args)
  File "dataimport.py", line 71, in importFromExcel
    result = coll.insert_many(data_dict)
  File "C:\Python38\lib\site-packages\pymongo\collection.py", line 758, in insert_many
    blk.execute(write_concern, session=session)
  File "C:\Python38\lib\site-packages\pymongo\bulk.py", line 511, in execute
    return self.execute_command(generator, write_concern, session)
  File "C:\Python38\lib\site-packages\pymongo\bulk.py", line 345, in execute_command
    client._retry_with_session(
  File "C:\Python38\lib\site-packages\pymongo\mongo_client.py", line 1384, in _retry_with_session
    return func(session, sock_info, retryable)
  File "C:\Python38\lib\site-packages\pymongo\bulk.py", line 339, in retryable_bulk
    self._execute_command(
  File "C:\Python38\lib\site-packages\pymongo\bulk.py", line 295, in _execute_command
    result, to_send = bwc.execute(ops, client)
  File "C:\Python38\lib\site-packages\pymongo\message.py", line 898, in execute
    request_id, msg, to_send = self._batch_command(docs)
  File "C:\Python38\lib\site-packages\pymongo\message.py", line 890, in _batch_command
    request_id, msg, to_send = _do_bulk_write_command(
  File "C:\Python38\lib\site-packages\pymongo\message.py", line 1382, in _do_bulk_write_command
    return _do_batched_op_msg(
  File "C:\Python38\lib\site-packages\pymongo\message.py", line 1307, in _do_batched_op_msg
    return _batched_op_msg(
  File "pandas\_libs\tslibs\nattype.pyx", line 64, in pandas._libs.tslibs.nattype._make_error_func.f
ValueError: NaTType does not support utcoffset

Можно предположить, что ValueError и BulkWriteError - это не одно и то же, поэтому nInserted никогда не печатает. У кого-нибудь есть идеи, как получить количество успешных вставок до отказа?

1 Ответ

0 голосов
/ 05 августа 2020
• 1000 значение, попробуйте: (замените 'date' на столбец, содержащий дату)
null_df = df[pd.isnull(df['date'])]
print(null_df)

Чтобы удалить элементы с нулевой датой, используйте:

df = df[pd.notnull(df['date'])]
...