Repository: evidentlyai/evidently
Issue: Exception "division by 0" error with NaNs in DataDrift if stattest jensenshannon is used
Root cause: Validation Gap

If we have more than 1000 values in a reference dataset and NaN values in a current dataset and try to get DataDrift report, an error `ZeroDivisionError: division by zero` occurs.

Code for reproducing:
```
import pandas as pd
from evidently import ColumnMapping

from evidently.dashboard import Dashboard
from evidently.dashboard.tabs import DataDriftTab

ref_test_data = pd.DataFrame(
    {
        "target": [1, 2, 3, 1, 1] * 1000,
        "num": [1, 2, 3, 4, 5] * 1000,
        "cat": [1, 0, 1, 0, 0] * 1000,
    }
)

curr_test_data = pd.DataFrame(
    {
        "target": [1, 2],
        "num": [None, None],
        "cat": [14, None],
    }
)

data_columns = ColumnMapping(
    categorical_features=["cat"], target="target",
)
report = Dashboard(tabs=[DataDriftTab()])
report.calculate(
    current_data=curr_test_data, reference_data=ref_test_data, column_mapping=data_columns
)
```

Traceback
```
Traceback (most recent call last):
  File "/Users/tapot/prg/evi/evidently_dev/test.py", line 540, in <module>
    main()
  File "/Users/tapot/prg/evi/evidently_dev/test.py", line 536, in main
    test_bug_with_jensenshannon_stattest()
  File "/Users/tapot/prg/evi/evidently_dev/test.py", line 516, in test_bug_with_jensenshannon_stattest
    current_data=curr_test_data, reference_data=ref_test_data, column_mapping=data_columns
  File "/Users/tapot/prg/evi/evidently_dev/evidently_repo/src/evidently/dashboard/dashboard.py", line 186, in calculate
    self.execute(reference_data, current_data, column_mapping)
  File "/Users/tapot/prg/evi/evidently_dev/evidently_repo/src/evidently/pipeline/pipeline.py", line 50, in execute
    self.analyzers_results[analyzer] = instance.calculate(rdata, cdata, column_mapping)
  File "/Users/tapot/prg/evi/evidently_dev/evidently_repo/src/evidently/analyzers/data_drift_analyzer.py", line 41, in calculate
    data_drift_options=data_drift_options,
  File "/Users/tapot/prg/evi/evidently_dev/evidently_repo/src/evidently/calculations/data_drift.py", line 229, in get_overall_data_drift
    drift_result = test(ref_feature, curr_feature, feature_type, threshold)
  File "/Users/tapot/prg/evi/evidently_dev/evidently_repo/src/evidently/calculations/stattests/registry.py", line 35, in __call__
    drift_score, drifted = self.func(reference_data, current_data, feature_type, actual_threshold)
  File "/Users/tapot/prg/evi/evidently_dev/evidently_repo/src/evidently/calculations/stattests/jensenshannon.py", line 25, in _jensenshannon
    reference_percents, current_percents = get_binned_data(reference_data, current_data, feature_type, n_bins, False)
  File "/Users/tapot/prg/evi/evidently_dev/evidently_repo/src/evidently/calculations/stattests/utils.py", line 31, in get_binned_data
    current_percents = np.array([current_feature_dict[key] / len(current) for key in keys])
  File "/Users/tapot/prg/evi/evidently_dev/evidently_repo/src/evidently/calculations/stattests/utils.py", line 31, in <listcomp>
    current_percents = np.array([current_feature_dict[key] / len(current) for key in keys])
ZeroDivisionError: division by zero
```

Discord discussion with real-data dataset https://discord.com/channels/815991896916361276/1020337385202012183

Out stat tests are not defined when current or reference data are empty. 
so here we need to add correct error information: 

Value Error: an empty column provided for drift calculation in the current dataset
or 
Value Error: an empty column provided for drift calculation in the reference dataset

We should add it in all stattests: chisquare, jensenshannon, kl_div, ks, psi, wasserstein  and z-test

@0lgaF it also makes sense for me to raise an error for this case.

Btw, when I run the given code I get: 

```ValueError                                Traceback (most recent call last)
     26 report = Dashboard(tabs=[DataDriftTab()])
     27 report.calculate(
---> 28     current_data=curr_test_data, reference_data=ref_test_data, column_mapping=data_columns
     29 )

c:\Users\AX-St\hackoctober\evidently\evidently\src\evidently\dashboard\dashboard.py in calculate(self, reference_data, current_data, column_mapping)
    187     ):
    188         column_mapping = column_mapping or ColumnMapping()
--> 189         self.execute(reference_data, current_data, column_mapping)
    190 
    191     def __dashboard_data(self) -> Tuple[str, DashboardInfo, Dict]:

c:\Users\AX-St\hackoctober\evidently\evidently\src\evidently\pipeline\pipeline.py in execute(self, reference_data, current_data, column_mapping)
     48             instance = analyzer()
     49             instance.options_provider = self.options_provider
---> 50             self.analyzers_results[analyzer] = instance.calculate(rdata, cdata, column_mapping)
     51         for stage in self.stages:
     52             stage.options_provider = self.options_provider

c:\Users\AX-St\hackoctober\evidently\evidently\src\evidently\analyzers\data_drift_analyzer.py in calculate(self, reference_data, current_data, column_mapping)
     39             reference_data=reference_data,
     40             dataset_columns=columns,
...
---> 94             raise ValueError(f"Column {column_name} in current dataset should contain numerical values only.")
     95 
     96     reference_column = reference_column.replace([-np.inf, np.inf], np.nan).dropna()

ValueError: Column num in current dataset should contain numerical values only.
```


Hey @AntonisCSt ,
thank you for your input. We added additional ValueErrors for described case:
```
An empty column '{column_name}' was provided for drift calculation in the reference/current dataset
```

Fix is merged, it will be available in the next package.