class_docstr: Connected points
  
  {usage}
  
  Parameters
  ----------
  {common_parameters}
  lineend : Literal["butt", "round", "projecting"], default="butt"
      Line end style. This option is applied for solid linetypes.
  linejoin : Literal["round", "miter", "bevel"], default="round"
      Line join style. This option is applied for solid linetypes.
  arrow : ~plotnine.geoms.geom_path.arrow, default=None
      Arrow specification. Default is no arrow.
  
  See Also
  --------
  plotnine.geoms.geom_path.arrow : for adding arrowhead(s) to paths.
class_docstr_tok: ["Connected","points","{","usage","}","Parameters","--","--","--","--","--","{","common_parameters","}","lineend",":","Literal","[","``","butt","''",",","``","round","''",",","``","projecting","''","]",",","default=","''","butt","''","Line","end","style",".","This","option","is","applied","for","solid","linetypes",".","linejoin",":","Literal","[","``","round","''",",","``","miter","''",",","``","bevel","''","]",",","default=","''","round","''","Line","join","style",".","This","option","is","applied","for","solid","linetypes",".","arrow",":","~plotnine.geoms.geom_path.arrow",",","default=None","Arrow","specification",".","Default","is","no","arrow",".","See","Also","--","--","--","--","plotnine.geoms.geom_path.arrow",":","for","adding","arrowhead","(","s",")","to","paths","."]
code: def handle_na(self, data: pd.DataFrame) -> pd.DataFrame:
      def keep(x: Sequence[float]) -> npt.NDArray[np.bool_]:
          # first non-missing to last non-missing
          first = match([False], x, nomatch=1, start=0)[0]
          last = len(x) - match([False], x[::-1], nomatch=1, start=0)[0]
          bool_idx = np.hstack(
              [
                  np.repeat(False, first),
                  np.repeat(True, last - first),
                  np.repeat(False, len(x) - last),
              ]
          )
          return bool_idx
  
      # Get indices where any row for the select aesthetics has
      # NaNs at the beginning or the end. Those we drop
      bool_idx = (
          data[["x", "y", "size", "color", "linetype"]]
          .isna()  # Missing
          .apply(keep, axis=0)
      )  # Beginning or the End
      bool_idx = np.all(bool_idx, axis=1)  # Across the aesthetics
  
      # return data
      n1 = len(data)
      data = data[bool_idx]
      data.reset_index(drop=True, inplace=True)
      n2 = len(data)
  
      if n2 != n1 and not self.params["na_rm"]:
          msg = "geom_path: Removed {} rows containing missing values."
          warn(msg.format(n1 - n2), PlotnineWarning)
  
      return data
  
imports: from __future__ import annotations
  import typing
  from collections import Counter
  from contextlib import suppress
  from warnings import warn
  import numpy
  from .._utils import SIZE_FACTOR, make_line_segments, match, to_rgba
  from ..doctools import document
  from ..exceptions import PlotnineWarning
  from .geom import geom
label_desc: Use image node_id 1 for calling the geom_path obj's underlying member method code with example usage: obj.handle_na(data) and returns: data, bool_idx