code: def test_init_es_with_dataframe_and_params(df):
      logical_types = {
          "id": "NaturalLanguage",
          "category": NaturalLanguage,
      }
      semantic_tags = {"category": "new_tag"}
      es = EntitySet(
          "es",
          dataframes={
              "table": (df, "id", None, logical_types, semantic_tags)
          },
      )
  
      assert es.id == "es"
      assert len(es.dataframe_dict) == 1
      assert es["table"] is df
  
      assert es["table"].ww.schema is not None
  
      assert es["table"].ww.index == "id"
      assert es["table"].ww.time_index is None
  
      assert isinstance(
          es["table"].ww.logical_types["id"], NaturalLanguage
      )
      assert isinstance(
          es["table"].ww.logical_types["category"], NaturalLanguage
      )
  
      assert es["table"].ww.semantic_tags["id"] == {"index"}
      assert es["table"].ww.semantic_tags["category"] == {"new_tag"}
  
imports: from datetime import datetime
  import numpy
  import pandas
  import pytest
  from woodwork.exceptions import TypeConversionError
  from woodwork.logical_types import Boolean, Categorical, Datetime, Double, Integer, NaturalLanguage
  from featuretools.entityset.entityset import LTI_COLUMN_NAME, EntitySet
  from featuretools.tests.testing_utils import to_pandas
  from featuretools.utils.gen_utils import Library, import_or_none, is_instance
label_desc: Use image node_id 9 for calling a global function with example usage: test_init_es_with_dataframe_and_params(df) without return types