Игнорирование KeyError при записи в файл с помощью dask.to_csv

#python #dataframe #dask #keyerror

#python #фрейм данных #dask #keyerror

Вопрос:

У меня есть фрейм данных, который не загружается в память (и он должен оставаться таким).
В какой-то момент скрипта я применяю преобразование со словарем к одному из столбцов фрейма данных следующим образом:

 df['identifier'] = df.identifier.map(lambda identifier: alias_dict[str(identifier)],
                                                               meta=('identifier', str))
 

Исключения KeyError обнаруживаются не на этом этапе, а только тогда, когда я использую to_csv , поэтому я пытаюсь с ними справиться

 try:
   dd.to_csv(intersection_df, output, header=None, index=None, single_file=True, sep='t')
except KeyError as err:
   print(f'Unmatched key {err.args[0]}')
 

В случае, если я столкнусь с ошибкой ключа, запись в файл будет остановлена — есть ли способ продолжить запись, даже если я получу исключение на этом этапе?

Ответ №1:

Лучшее, что можно сделать, если вы хотите пропустить или исправить неудачные строки, но продолжаете писать, — это поместить ваш try / except в функцию сопоставления

 def alias(identifier):
    try:
        return alias_dict[str(identifier)]
    except KeyError:
        return identifier

df['identifier'] = df.identifier.map(alias, meta=('identifier', str))
 

В этом случае сбои передаются без изменений. Вы можете превратить их в None и отфильтровать на втором шаге, или эти два шага можно объединить map_partitions .

Комментарии:

1. Есть ли способ передать df в качестве аргумента alias также?

2. Не в этой формулировке, нет. Операции по строкам сильно отличаются от тех, которые требуют полных данных.