code: def _bqschema_to_nullsafe_dtypes(schema_fields):
      
      # If you update this mapping, also update the table at
      # `docs/source/reading.rst`.
      dtype_map = {
          "FLOAT": np.dtype(float),
          # pandas doesn't support timezone-aware dtype in DataFrame/Series
          # constructors. It's more idiomatic to localize after construction.
          # https://github.com/pandas-dev/pandas/issues/25843
          "TIMESTAMP": "datetime64[ns]",
          "TIME": "datetime64[ns]",
          "DATE": "datetime64[ns]",
          "DATETIME": "datetime64[ns]",
      }
  
      dtypes = {}
      for field in schema_fields:
          name = str(field["name"])
          if field["mode"].upper() == "REPEATED":
              continue
  
          dtype = dtype_map.get(field["type"].upper())
          if dtype:
              dtypes[name] = dtype
  
      return dtypes
docs: Specify explicit dtypes based on BigQuery schema.
  
      This function only specifies a dtype when the dtype allows nulls.
      Otherwise, use pandas's default dtype choice.
  
      See: http://pandas.pydata.org/pandas-docs/dev/missing_data.html
      #missing-data-casting-rules-and-indexing