code: def _dendropy_to_dataframe(
      tree,
      add_node_labels=True,
      use_uids=True):
      
      # Maximum distance from root.
      tree.max_distance_from_root()
  
      # Initialize the data object.
      idx = []
      data = {
          'type': [],
          'id': [],
          'parent': [],
          'length': [],
          'label': [],
          'distance': []}
  
      if use_uids:
          data['uid'] = []
  
      # Add labels to internal nodes if set to true.
      if add_node_labels:
          for i, node in enumerate(tree.internal_nodes()):
              node.label = str(i)
  
      for node in tree.nodes():
          # Get node type
          if node.is_leaf():
              type_ = 'leaf'
              label = str(node.taxon.label).replace(' ', '_')
          elif node.is_internal():
              type_ = 'node'
              label = str(node.label)
  
          # Set node label and parent.
          id_ = label
          parent_node = node.parent_node
          length = node.edge_length
          distance = node.distance_from_root()
  
          # Is this node a root?
          if parent_node is None and length is None:
              parent_label = None
              parent_node = None
              length = 0
              distance = 0
              type_ = 'root'
  
          # Set parent node label
          elif parent_node.is_internal():
              parent_label = str(parent_node.label)
  
          else:
              raise Exception("Subtree is not attached to tree?")
  
          # Add this node to the data.
          data['type'].append(type_)
          data['id'].append(id_)
          data['parent'].append(parent_label)
          data['length'].append(length)
          data['label'].append(label)
          data['distance'].append(distance)
  
          if use_uids:
              data['uid'].append(get_random_id(10))
  
      # Construct dataframe.
      df = pandas.DataFrame(data)
      return df
docs: Convert Dendropy tree to Pandas dataframe.