code: def select(
      df: pd.DataFrame,
      *args,
      index: Any = None,
      columns: Any = None,
      axis: str = "columns",
      invert: bool = False,
  ) -> pd.DataFrame:
      """Method-chainable selection of rows and columns.
  
      It accepts a string, shell-like glob strings `(*string*)`,
      regex, slice, array-like object, or a list of the previous options.
  
      Selection on a MultiIndex on a level, or multiple levels,
      is possible with a dictionary.
  
      This method does not mutate the original DataFrame.
  
      Selection can be inverted with the `DropLabel` class.
  
      Optional ability to invert selection of index/columns available as well.
  
  
      !!! info "New in version 0.24.0"
  
  
      !!!note
  
          The preferred option when selecting columns or rows in a Pandas DataFrame
          is with `.loc` or `.iloc` methods, as they are generally performant.
          `select` is primarily for convenience.
  
      !!! abstract "Version Changed"
  
          - 0.26.0
              - Added variable `args`, `invert` and `axis` parameters.
              - `rows` keyword deprecated in favour of `index`.
  
      Examples:
          >>> import pandas as pd
          >>> import janitor
          >>> df = pd.DataFrame([[1, 2], [4, 5], [7, 8]],
          ...      index=['cobra', 'viper', 'sidewinder'],
          ...      columns=['max_speed', 'shield'])
          >>> df
                      max_speed  shield
          cobra               1       2
          viper               4       5
          sidewinder          7       8
          >>> df.select(index='cobra', columns='shield')
                 shield
          cobra       2
  
          Labels can be dropped with the `DropLabel` class:
  
          >>> df.select(index=DropLabel('cobra'))
                      max_speed  shield
          viper               4       5
          sidewinder          7       8
  
      More examples can be found in the
      [`select_columns`][janitor.functions.select.select_columns] section.
  
      Args:
          df: A pandas DataFrame.
          *args: Valid inputs include: an exact index name to look for,
              a shell-style glob string (e.g. `*_thing_*`),
              a regular expression,
              a callable,
              or variable arguments of all the aforementioned.
              A sequence of booleans is also acceptable.
              A dictionary can be used for selection
              on a MultiIndex on different levels.
          index: Valid inputs include: an exact label to look for,
              a shell-style glob string (e.g. `*_thing_*`),
              a regular expression,
              a callable,
              or variable arguments of all the aforementioned.
              A sequence of booleans is also acceptable.
              A dictionary can be used for selection
              on a MultiIndex on different levels.
          columns: Valid inputs include: an exact label to look for,
              a shell-style glob string (e.g. `*_thing_*`),
              a regular expression,
              a callable,
              or variable arguments of all the aforementioned.
              A sequence of booleans is also acceptable.
              A dictionary can be used for selection
              on a MultiIndex on different levels.
          invert: Whether or not to invert the selection.
              This will result in the selection
              of the complement of the rows/columns provided.
          axis: Whether the selection should be on the index('index'),
              or columns('columns').
              Applicable only for the variable args parameter.
  
      Raises:
          ValueError: If args and index/columns are provided.
  
      Returns:
          A pandas DataFrame with the specified rows and/or columns selected.
      """  # noqa: E501
  
      if args:
          check("invert", invert, [bool])
          if (index is not None) or (columns is not None):
              raise ValueError(
                  "Either provide variable args with the axis parameter, "
                  "or provide arguments to the index and/or columns parameters."
              )
          if axis == "index":
              return _select(
                  df, rows=list(args), columns=columns, invert=invert
              )
          if axis == "columns":
              return _select(
                  df, columns=list(args), rows=index, invert=invert
              )
          raise ValueError(
              "axis should be either 'index' or 'columns'."
          )
      return _select(df, rows=index, columns=columns, invert=invert)
  
file_path: pyjanitor/janitor/functions/select.py
imports: from typing import Any
  import pandas
  import pandas_flavor
  from janitor.functions.utils import DropLabel, _select
  from janitor.utils import check, deprecated_alias, refactored_function
label_desc: Use image node_id 3 for calling a global function with example usage: select(df) and returns: _select, _select, _select