class_docstr: Class which stores vertex and edge properties that can be used to construct
  Graphs from individual property selections and used later to annotate graph
  algorithm results with corresponding properties.
class_docstr_tok: ["Class","which","stores","vertex","and","edge","properties","that","can","be","used","to","construct","Graphs","from","individual","property","selections","and","used","later","to","annotate","graph","algorithm","results","with","corresponding","properties","."]
docstr: Return a dataframe containing vertex properties for only the specified
  vertex_ids, columns, and/or types, or all vertex IDs if not specified.
docstr_tok: ["Return","a","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):
      """
      Return a dataframe containing vertex properties for only the specified
      vertex_ids, columns, and/or types, or all vertex IDs if not specified.
      """
      if self.__vertex_prop_dataframe is not None:
          df = self.__vertex_prop_dataframe
          if vertex_ids is not None:
              if isinstance(vertex_ids, int):
                  vertex_ids = [vertex_ids]
              try:
                  df = df.loc[vertex_ids]
              except TypeError:
                  raise TypeError(
                      "vertex_ids needs to be a list-like type "
                      f"compatible with DataFrame.loc[], got {type(vertex_ids)}"
                  )
  
          if types is not None:
              if isinstance(types, str):
                  df_mask = df[self.type_col_name] == types
              else:
                  df_mask = df[self.type_col_name].isin(types)
              df = df.loc[df_mask]
  
          # The "internal" pG.vertex_col_name and pG.type_col_name columns
          # are also included/added since they are assumed to be needed by
          # the caller.
          if columns is not None:
              # FIXME: invalid columns will result in a KeyError, should a
              # check be done here and a more PG-specific error raised?
              df = df[[self.type_col_name] + columns]
          df_out = df.reset_index()
  
          # Preserve the dtype (vertex id type) to avoid cugraph algorithms
          # throwing errors due to a dtype mismatch
          index_dtype = self.__vertex_prop_dataframe.index.dtype
          df_out.index = df_out.index.astype(index_dtype)
  
          return df_out
  
      return None
  
imports: import cudf
  import cupy
  import cugraph
  import dask_cudf
  import cugraph.dask
  from cugraph.utilities.utils import import_optional, create_list_series_from_2d_ar
  from typing import Union
label_desc: Use image node_id 20 for calling the EXPERIMENTAL__MGPropertyGraph obj's underlying member method code with example usage: obj.get_vertex_data(vertex_ids, types, columns) and returns: None, df_out