njalex22
njalex22

Reputation: 417

Suppress a python warning

While I iterate within a for loop I continually receive the same warning, which I want to suppress. The warning reads:

C:\Users\Nick Alexander\AppData\Local\Programs\Python\Python37\lib\site-packages\sklearn\preprocessing\data.py:193: UserWarning: Numerical issues were encountered when scaling the data and might not be solved. The standard deviation of the data is probably very close to 0. warnings.warn("Numerical issues were encountered "

The code that is producing the warning is as follows:

def monthly_standardize(cols, df_train, df_train_grouped, df_val, df_val_grouped, df_test, df_test_grouped):
    # Disable the SettingWithCopyWarning warning
    pd.options.mode.chained_assignment = None
    for c in cols:
        df_train[c] = df_train_grouped[c].transform(lambda x: scale(x.astype(float)))
        df_val[c] = df_val_grouped[c].transform(lambda x: scale(x.astype(float)))
        df_test[c] = df_test_grouped[c].transform(lambda x: scale(x.astype(float)))
    return df_train, df_val, df_test

I am already disabling one warning. I don't want to disable all warnings, I just want to disable this warning. I am using python 3.7 and sklearn version 0.0

Upvotes: 21

Views: 36355

Answers (4)

OverLordGoldDragon
OverLordGoldDragon

Reputation: 19776

To ignore for specific code blocks:

import warnings

class IgnoreWarnings(object):
    def __init__(self, message):
        self.message = message
    
    def __enter__(self):
        warnings.filterwarnings("ignore", message=f".*{self.message}.*")
    
    def __exit__(self, *_):
        warnings.filterwarnings("default", message=f".*{self.message}.*")

with IgnoreWarnings("fish"):
    warnings.warn("here be fish")
    warnings.warn("here be dog")
warnings.warn("here were fish")
UserWarning: here be dog
UserWarning: here were fish

Upvotes: 2

DirtyBit
DirtyBit

Reputation: 16772

Try this at the beginning of the script to ignore specific warnings:

import warnings
warnings.filterwarnings("ignore", message="Numerical issues were encountered ")

Upvotes: 32

pandichef
pandichef

Reputation: 796

import warnings
with warnings.catch_warnings():
    warnings.simplefilter('ignore')
    # code that produces a warning

warnings.catch_warnings() means "whatever warnings. methods are run within this block, undo them when exiting the block".

Upvotes: 29

handras
handras

Reputation: 1628

The python contextlib has a contextmamager for this: suppress

from contextlib import suppress

with suppress(UserWarning):
    for c in cols:
        df_train[c] = df_train_grouped[c].transform(lambda x: scale(x.astype(float)))
        df_val[c] = df_val_grouped[c].transform(lambda x: scale(x.astype(float)))

Upvotes: 0

Related Questions