class_docstr: Initialize a Dataset from a CSV file/dataframe. This does NOT
  actually load the data into memory if the ``csv`` parameter contains filepaths.
  
  :param csv: (string or pandas.DataFrame):
      if string, should be a path to a .csv file which
      can be loaded as a pandas dataframe
  
  :param input_cols: (list of ints, or list of strings):
      which column(s) to use as input arrays.
      If int(s), should be column indicies.
      If str(s), should be column names
  
  :param target_cols: (list of ints, or list of strings):
      which column(s) to use as input arrays.
      If int(s), should be column indicies.
      If str(s), should be column names
  
  :param input_transform: (transform):
      tranform to apply to inputs during runtime loading
  
  :param target_tranform: (transform):
      transform to apply to targets during runtime loading
  
  :param co_transform: (transform):
      transform to apply to both inputs and targets simultaneously
      during runtime loading
  
  :param apply_transforms_individually: (bool):
      Whether to apply transforms to individual inputs or to an input row as a whole (default: False)
docstr: Index the dataset and return the input + target
docstr_tok: ["Index","the","dataset","and","return","the","input","+","target"]
code: def __getitem__(self, index):
      """
      Index the dataset and return the input + target
      """
  
      # input_sample = list()
      # for i in range(self.num_inputs):
      #     input_sample.append(self.input_transform[i](self.input_loader(self.inputs[index, i])))
  
      # input_sample
      if self.do_individual_transforms:
          input_sample = [
              self.input_transform[i](
                  self.input_loader(self.inputs[index, i])
              )
              for i in range(self.num_inputs)
          ]
      else:
          input_sample = self.input_transform[0](self.inputs[index])
  
      if self.has_target:
          if self.do_individual_transforms:
              target_sample = [
                  self.target_transform[i](
                      self.target_loader(self.targets[index, i])
                  )
                  for i in range(self.num_targets)
              ]
              for i in range(self.min_inputs_or_targets):
                  input_sample[i], target_sample[i] = self.co_transform[
                      i
                  ](input_sample[i], target_sample[i])
          else:
              target_sample = self.target_transform[0](
                  self.targets[index]
              )
              input_sample, target_sample = self.co_transform[0](
                  input_sample, target_sample
              )
  
          return self.input_return_processor(
              input_sample
          ), self.target_return_processor(target_sample)
      else:
          return self.input_return_processor(input_sample)
  
file_path: pywick/pywick/datasets/CSVDataset.py
imports: from .BaseDataset import BaseDataset
  import numpy
  import pandas
  from .data_utils import _return_first_element_of_list, default_file_reader, _pass_through, _process_transform_argument, _process_co_transform_argument
label_desc: Use image node_id 2 for calling the CSVDataset obj's underlying member method code with example usage: obj.__getitem__(index) and returns: self,  self, self