docstr: Gets a DataFrame containing vertex properties
  
  Parameters
  ----------
  vertex_ids : one or a collection of integers, optional
      single, list, slice, pandas array, or series of integers which
      are the vertices to include in the returned dataframe
  types : str or collection of str, optional
      types of the vertices to include in the returned data.
      Default is to return all vertex types.
  columns : str or list of str, optional
      property or properties to include in returned data.
      Default includes all properties.
  backend : ('numpy', 'pandas', 'cupy', 'cudf', 'torch', 'torch:<device>')
      Defaults to cudf if available, otherwise falls back to numpy.
  
  Returns
  -------
  DataFrame
      containing vertex properties for only the specified
      vertex_ids, columns, and/or types, or all vertex IDs if not specified.
code: def get_vertex_data(
      self,
      vertex_ids=None,
      types=None,
      columns=None,
      backend=("cudf" if cudf_installed else "numpy"),
  ):
      """
      Gets a DataFrame containing vertex properties
  
      Parameters
      ----------
      vertex_ids : one or a collection of integers, optional
          single, list, slice, pandas array, or series of integers which
          are the vertices to include in the returned dataframe
      types : str or collection of str, optional
          types of the vertices to include in the returned data.
          Default is to return all vertex types.
      columns : str or list of str, optional
          property or properties to include in returned data.
          Default includes all properties.
      backend : ('numpy', 'pandas', 'cupy', 'cudf', 'torch', 'torch:<device>')
          Defaults to cudf if available, otherwise falls back to numpy.
  
      Returns
      -------
      DataFrame
          containing vertex properties for only the specified
          vertex_ids, columns, and/or types, or all vertex IDs if not specified.
      """
  
      # FIXME expose na handling
  
      if columns is None:
          columns = self.vertex_property_names
  
      if vertex_ids is None:
          vertex_ids = -1
  
      vertex_data = self.__client.get_graph_vertex_data(
          id_or_ids=vertex_ids,
          property_keys=columns,
          types=types,
          graph_id=self.__graph_id,
      )
  
      # Convert type to numeric if necessary
      if backend not in ["cudf", "pandas"]:
          vertex_cat_types = self._vertex_categorical_dtype
          vertex_data[:, 1] = np.array(
              [vertex_cat_types[t] for t in vertex_data[:, 1]]
          )
          cat_dtype = "int32"
      else:
          cat_dtype_class = (
              cudf.CategoricalDtype
              if backend == "cudf"
              else pandas.CategoricalDtype
          )
          cat_dtype = cat_dtype_class(
              self._vertex_categorical_dtype.keys(), ordered=True
          )
  
      columns = set(columns)
      if self.type_col_name in columns:
          columns.remove(self.type_col_name)
      if self.vertex_col_name in columns:
          columns.remove(self.vertex_col_name)
      column_names = [self.vertex_col_name, self.type_col_name] + list(
          columns
      )
  
      return _transform_to_backend_dtype(
          vertex_data,
          column_names,
          backend,
          dtypes={self.type_col_name: cat_dtype},
      )
  
imports: import numpy
  import importlib
  from cugraph_service_client.exceptions import CugraphServiceError
  from cugraph_service_client.remote_graph_utils import _transform_to_backend_dtype, _transform_to_backend_dtype_1d, _offsets_to_backend_dtype, MissingModule
label_desc: Use image node_id 31 for calling the RemoteGraph obj's underlying member method code with example usage: obj.get_vertex_data(vertex_ids, types, columns, backend) and returns: _transform_to_backend_dtype