code: def _spot_empty_periods(
      self, ohlcv_df, asset, data_frequency, empty_rows_behavior
  ):
      problems = []
  
      nan_rows = ohlcv_df[ohlcv_df.isnull().T.any().T].index
      if len(nan_rows) > 0:
          dates = []
          for row_date in nan_rows.values:
              row_date = pd.to_datetime(row_date, utc=True)
              if row_date > asset.start_date:
                  dates.append(row_date)
  
          if len(dates) > 0:
              end_dt = (
                  asset.end_minute
                  if data_frequency == "minute"
                  else asset.end_daily
              )
  
              problem = (
                  "{name} ({start_dt} to {end_dt}) has empty "
                  "periods: {dates}".format(
                      name=asset.symbol,
                      start_dt=asset.start_date.strftime(
                          DATE_TIME_FORMAT
                      ),
                      end_dt=end_dt.strftime(DATE_TIME_FORMAT),
                      dates=[
                          date.strftime(DATE_TIME_FORMAT)
                          for date in dates
                      ],
                  )
              )
  
              if empty_rows_behavior == "warn":
                  log.warn(problem)
  
              elif empty_rows_behavior == "raise":
                  raise EmptyValuesInBundleError(
                      name=asset.symbol,
                      end_minute=end_dt,
                      dates=dates,
                  )
  
              else:
                  ohlcv_df.dropna(inplace=True)
  
          else:
              problem = None
  
          problems.append(problem)
  
      return problems
  
imports: import os
  import shutil
  from datetime import timedelta
  from functools import partial
  from itertools import chain
  from operator import is_not
  import numpy
  import pandas
  import pytz
  from catalyst import get_calendar
  from catalyst.assets._assets import TradingPair
  from catalyst.constants import DATE_TIME_FORMAT, AUTO_INGEST
  from catalyst.constants import LOG_LEVEL
  from catalyst.data.minute_bars import BcolzMinuteOverlappingData, BcolzMinuteBarMetadata
  from catalyst.exchange.exchange_bcolz import BcolzExchangeBarReader, BcolzExchangeBarWriter
  from catalyst.exchange.exchange_errors import EmptyValuesInBundleError, TempBundleNotFoundError, NoDataAvailableOnExchange, PricingDataNotLoadedError, DataCorruptionError, PricingDataValueError
  from catalyst.exchange.utils.bundle_utils import range_in_bundle, get_bcolz_chunk, get_df_from_arrays, get_assets
  from catalyst.exchange.utils.datetime_utils import get_start_dt, get_period_label, get_month_start_end, get_year_start_end
  from catalyst.exchange.utils.exchange_utils import get_exchange_folder, save_exchange_symbols, mixin_market_params, get_catalyst_symbol
  from catalyst.utils.cli import maybe_show_progress
  from catalyst.utils.paths import ensure_directory
  from logbook import Logger
  from pytz import UTC
  from six import itervalues
label_desc: Use image node_id 8 for calling the ExchangeBundle obj's underlying member method code with example usage: obj._spot_empty_periods(ohlcv_df, asset, data_frequency, empty_rows_behavior) and returns: problems