使用 dask.to_csv 写入文件时忽略 KeyError
Ignoring KeyError while writing to file with dask.to_csv
我有一个数据框,它没有加载到内存中(它应该保持这样)。
在脚本中的某个时刻,我通过以下方式将带有字典的转换应用于其中一个数据框列:
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]}')
万一我遇到 KeyError,写入文件就会停止 - 有没有办法让写入继续,即使我在那个阶段遇到异常?
如果您想跳过或修复失败的行但继续编写,最好的办法是将您的 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
.
结合使用
我有一个数据框,它没有加载到内存中(它应该保持这样)。
在脚本中的某个时刻,我通过以下方式将带有字典的转换应用于其中一个数据框列:
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]}')
万一我遇到 KeyError,写入文件就会停止 - 有没有办法让写入继续,即使我在那个阶段遇到异常?
如果您想跳过或修复失败的行但继续编写,最好的办法是将您的 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
.