code: def reformat_meta(self):
          
          meta = self.annotation  # For shorthand (passed by reference)
          channel_properties = []
  
          for key, value in meta.items():
              if key[:3] == '$P1':
                  if key[3] not in string.digits:
                      channel_properties.append(key[3:])
  
          # Capture all the channel information in a list of lists -- used to create a data frame
          channel_matrix = [
              [meta.get('$P{0}{1}'.format(ch, p)) for p in channel_properties]
              for ch in self.channel_numbers
          ]
  
          # Remove this information from the dictionary
          for ch in self.channel_numbers:
              for p in channel_properties:
                  key = '$P{0}{1}'.format(ch, p)
                  if key in meta:
                      meta.pop(key)
  
          num_channels = meta['$PAR']
          column_names = ['$Pn{0}'.format(p) for p in channel_properties]
  
          df = pd.DataFrame(channel_matrix, columns=column_names,
                            index=(1 + numpy.arange(num_channels)))
  
          if '$PnE' in column_names:
              df['$PnE'] = df['$PnE'].apply(lambda x: x.split(','))
  
          df.index.name = 'Channel Number'
          meta['_channels_'] = df
          meta['_channel_names_'] = self.get_channel_names()
docs: Collect the meta data information in a more user friendly format.
  
          Function looks through the meta data, collecting the channel related information into a
          dataframe and moving it into the _channels_ key.