code: def csv_header_and_defaults(features, schema, stats, keep_target):
    
  
    target_name = get_target_name(features)
    if keep_target and not target_name:
      raise ValueError('Cannot find target transform')
  
    csv_header = []
    record_defaults = []
    for col in schema:
      if not keep_target and col['name'] == target_name:
        continue
  
      # Note that numerical key columns do not have a stats entry, hence the use
      # of get(col['name'], {})
      csv_header.append(col['name'])
      if col['type'].lower() == INTEGER_SCHEMA:
        dtype = tf.int64
        default = int(stats['column_stats'].get(col['name'], {}).get('mean', 0))
      elif col['type'].lower() == FLOAT_SCHEMA:
        dtype = tf.float32
        default = float(stats['column_stats'].get(col['name'], {}).get('mean', 0.0))
      else:
        dtype = tf.string
        default = ''
  
      record_defaults.append(tf.constant([default], dtype=dtype))
  
    return csv_header, record_defaults
docs: Gets csv header and default lists.