code: def xls_to_nodes_df(self, xls, nodes_df_transformer=None):
      if nodes_df_transformer is None:
          nodes_df_transformer = (
              NodeXLGraphistryBase.nodes_df_transformer_default
          )
      raw_nodes_df = pd.read_excel(xls, "Vertices")
      node_header_dict = raw_nodes_df[0:1].to_dict()
      node_header_mapping = {
          x: node_header_dict[x][0] for x in node_header_dict.keys()
      }
  
      ##x, y are not (yet) official passthrough bindings, but automation happens to pick these up
      nodes_df = raw_nodes_df.rename(
          columns=node_header_mapping
      ).rename(columns={"X": "x", "Y": "y"})
  
      nodes_df = nodes_df_transformer(nodes_df)
      return nodes_df
  
file_path: pygraphistry/graphistry/nodexlistry.py
imports: import pandas
label_desc: Use image node_id 9 for calling the NodeXLGraphistryBase obj's underlying member method code with example usage: obj.xls_to_nodes_df(xls, nodes_df_transformer) and returns: nodes_df