我有一个脚本,它遍历数千个csv并将它们读入pandas,然后在一行中执行一堆其他操作。
每隔一段时间,我收到这样的消息:
sys:1: DtypeWarning:列(10,11,23)有混合类型。
在导入时指定dtype选项或设置low_memory=False。我尝试了try/except语句,但是它没有被捕获,因为它是一个警告而不是一个异常。
有没有办法像:
那样做try:
df = pd.read_csv(file_path)
except pd.errors.DtypeWarning:
df = pd.read_csv(file_path, low_memory=False)
我只想使用low_memory=False,如果我在特定的文件上得到警告,而不是其他数千个文件
我也不能设置所有的列dtypes,因为许多csv文件有不同的列/数据/等。
我不想设置警告。simplefilter('error', pd.errors.DtypeWarning),因为它看起来有点过分。如果我没有捕捉到它,我不希望其他的DtypeWarning在某处阻止它运行。
warnings.simplefilter
的存在正是为了这个目的。在警告处理程序中,您可以设置条件以确保不会捕获不需要的警告。
如果警告只"偶尔"那么您可能希望在警告处理程序代码上浪费太多的运行时间。