code: def _process_row(self, row):
      values = OrderedDict()
      if len(row) == len(self._columns):
          for column, column_value in enumerate(row):
              variable, index, label = self._columns[column]
              if index is None:
                  values[variable] = self._get_value(
                      column_value, is_vector=True
                  )
              else:
                  if variable not in values:
                      values[variable] = []
                  values[variable].append(self._get_value(column_value))
      return values.values()
  
imports: import atexit
  import csv
  import os
  import threading
  from collections import OrderedDict, deque
  from time import sleep
  import numpy
  from nnabla.config import nnabla_config
  from nnabla.logger import logger
  from nnabla.utils.communicator_util import current_communicator
  from six.moves import queue
  from .data_source import DataSource
  from .data_source_loader import FileReader, load
label_desc: Use image node_id 3 for calling the CsvDataSource obj's underlying member method code with example usage: obj._process_row(row) and returns: values