code: def test_get_drift_skew_dataframe(self):
      anomalies = text_format.Parse(
          """
      drift_skew_info {
       path: {step: "feature_1"}
       drift_measurements {
         type: JENSEN_SHANNON_DIVERGENCE
         value: 0.4
         threshold: 0.1
       }
      }
      drift_skew_info {
       path: {step: "feature_2"}
       drift_measurements {
        type: L_INFTY
        value: 0.5
        threshold: 0.1
      }
      }
      """,
          anomalies_pb2.Anomalies(),
      )
      actual_output = display_util.get_drift_skew_dataframe(anomalies)
      expected = pd.DataFrame(
          [
              ["feature_1", "JENSEN_SHANNON_DIVERGENCE", 0.4, 0.1],
              ["feature_2", "L_INFTY", 0.5, 0.1],
          ],
          columns=["path", "type", "value", "threshold"],
      ).set_index("path")
      self.assertTrue(actual_output.equals(expected))
  
imports: from __future__ import absolute_import
  from __future__ import division
  from __future__ import print_function
  from typing import Any, Dict
  from absl.testing import absltest
  from absl.testing import parameterized
  from google.protobuf import text_format
  import pandas
  from tensorflow_data_validation import constants
  from tensorflow_data_validation import types
  from tensorflow_data_validation.skew.protos import feature_skew_results_pb2
  from tensorflow_data_validation.utils import display_util
  from tensorflow_data_validation.utils import test_util
  from tensorflow_metadata.proto.v0 import anomalies_pb2
  from tensorflow_metadata.proto.v0 import schema_pb2
  from tensorflow_metadata.proto.v0 import statistics_pb2
label_desc: Use image node_id 10 for calling the DisplayUtilTest obj's underlying member method code with example usage: obj.test_get_drift_skew_dataframe() without return types