#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. Не в этой формулировке, нет. Операции по строкам сильно отличаются от тех, которые требуют полных данных.