code: def get_df_from_csv(
      file_path: PathType,
      delimiter: str,
      index_col: Optional[Union[str, int]] = None,
      possible_idx_keywords: Optional[List[str]] = None,
      *,
      columns_to_drop: Optional[List[Union[str, int]]] = None,
      columns_to_use: Optional[List[Union[str, int]]] = None,
  ):
      def define_index_column(
          candidate_columns: List[str],
      ) -> Optional[str]:
          for column_name in candidate_columns:
              if is_column_name_suitable_for_index(column_name):
                  return column_name
  
      def is_column_name_suitable_for_index(column_name: str) -> bool:
          return any(
              key in column_name.lower()
              for key in possible_idx_keywords
          )
  
      columns_to_drop = copy(columns_to_drop) or []
      columns_to_use = copy(columns_to_use) or []
      possible_idx_keywords = possible_idx_keywords or []
  
      logger = default_log("CSV data extraction")
  
      columns = pd.read_csv(
          file_path, sep=delimiter, index_col=False, nrows=1
      ).columns
  
      if columns_to_drop and columns_to_use:
          raise ValueError(
              "Incompatible arguments are used: columns_to_drop and columns_to_use. "
              "Only one of them can be specified simultaneously."
          )
  
      if columns_to_drop:
          columns_to_use = [
              col for col in columns if col not in columns_to_drop
          ]
      elif not columns_to_use:
          columns_to_use = list(columns)
  
      candidate_idx_cols = [columns_to_use[0], columns[0]]
      if index_col is None:
          defined_index = define_index_column(candidate_idx_cols)
          if defined_index is not None:
              index_col = defined_index
              logger.message(
                  f'Used the column as index: "{index_col}".'
              )
  
      if (index_col is not None) and (index_col not in columns_to_use):
          columns_to_use.append(index_col)
  
      return pd.read_csv(
          file_path,
          sep=delimiter,
          index_col=index_col,
          usecols=columns_to_use,
      )
  
imports: from __future__ import annotations
  import glob
  import os
  from copy import copy, deepcopy
  from dataclasses import dataclass, field
  from typing import Any, Iterable, List, Optional, Tuple, Union
  import numpy
  import pandas
  from golem.core.log import default_log
  from golem.utilities.requirements_notificator import warn_requirement
  from fedot.core.data.array_utilities import atleast_2d
  from fedot.core.data.load_data import JSONBatchLoader, TextBatchLoader
  from fedot.core.data.supplementary_data import SupplementaryData
  from fedot.core.repository.dataset_types import DataTypesEnum
  from fedot.core.repository.tasks import Task, TaskTypesEnum
label_desc: Use image node_id 12 for calling a global function with example usage: get_df_from_csv(file_path, delimiter, index_col, possible_idx_keywords) and returns: pd, any, column_name