docstr: Ingest a DataFrame of OHLCV data for a given market.
  
  Parameters
  ----------
  ohlcv_df: DataFrame
  data_frequency: str
  asset: TradingPair
  writer:
  empty_rows_behavior: str
docstr_tok: ["Ingest","a","DataFrame","of","OHLCV","data","for","a","given","market",".","Parameters","--","--","--","--","--","ohlcv_df",":","DataFrame","data_frequency",":","str","asset",":","TradingPair","writer",":","empty_rows_behavior",":","str"]
code: def ingest_df(
      self,
      ohlcv_df,
      data_frequency,
      asset,
      writer,
      empty_rows_behavior="warn",
      duplicates_threshold=None,
  ):
      """
      Ingest a DataFrame of OHLCV data for a given market.
  
      Parameters
      ----------
      ohlcv_df: DataFrame
      data_frequency: str
      asset: TradingPair
      writer:
      empty_rows_behavior: str
  
      """
      problems = []
      if empty_rows_behavior is not "ignore":
          problems += self._spot_empty_periods(
              ohlcv_df, asset, data_frequency, empty_rows_behavior
          )
  
      # if duplicates_threshold is not None:
      #     problems += self._spot_duplicates(
      #         ohlcv_df, asset, data_frequency, duplicates_threshold
      #     )
  
      data = []
      if not ohlcv_df.empty:
          ohlcv_df.sort_index(inplace=True)
          data.append((asset.sid, ohlcv_df))
  
      self._write(data, writer, data_frequency)
  
      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 10 for calling the ExchangeBundle obj's underlying member method code with example usage: obj.ingest_df(ohlcv_df, data_frequency, asset, writer, empty_rows_behavior, duplicates_threshold) and returns: problems