code: def df_dropna(
      df,
      axis=0,
      how=no_default,
      thresh=no_default,
      subset=None,
      inplace=False,
  ):
      """
      Remove missing values.
  
      See the :ref:`User Guide <missing_data>` for more on which values are
      considered missing, and how to work with missing data.
  
      Parameters
      ----------
      axis : {0 or 'index', 1 or 'columns'}, default 0
          Determine if rows or columns which contain missing values are
          removed.
  
          * 0, or 'index' : Drop rows which contain missing values.
          * 1, or 'columns' : Drop columns which contain missing value.
  
          .. versionchanged:: 1.0.0
  
             Pass tuple or list to drop on multiple axes.
             Only a single axis is allowed.
  
      how : {'any', 'all'}, default 'any'
          Determine if row or column is removed from DataFrame, when we have
          at least one NA or all NA.
  
          * 'any' : If any NA values are present, drop that row or column.
          * 'all' : If all values are NA, drop that row or column.
  
      thresh : int, optional
          Require that many non-NA values.
      subset : array-like, optional
          Labels along other axis to consider, e.g. if you are dropping rows
          these would be a list of columns to include.
      inplace : bool, default False
          If True, do operation inplace and return None.
  
      Returns
      -------
      DataFrame
          DataFrame with NA entries dropped from it.
  
      See Also
      --------
      DataFrame.isna: Indicate missing values.
      DataFrame.notna : Indicate existing (non-missing) values.
      DataFrame.fillna : Replace missing values.
      Series.dropna : Drop missing values.
      Index.dropna : Drop missing indices.
  
      Examples
      --------
      >>> import mars.dataframe as md
      >>> df = md.DataFrame({"name": ['Alfred', 'Batman', 'Catwoman'],
      ...                    "toy": [np.nan, 'Batmobile', 'Bullwhip'],
      ...                    "born": [md.NaT, md.Timestamp("1940-04-25"),
      ...                             md.NaT]})
      >>> df.execute()
             name        toy       born
      0    Alfred        NaN        NaT
      1    Batman  Batmobile 1940-04-25
      2  Catwoman   Bullwhip        NaT
  
      Drop the rows where at least one element is missing.
  
      >>> df.dropna().execute()
           name        toy       born
      1  Batman  Batmobile 1940-04-25
  
      Drop the rows where all elements are missing.
  
      >>> df.dropna(how='all').execute()
             name        toy       born
      0    Alfred        NaN        NaT
      1    Batman  Batmobile 1940-04-25
      2  Catwoman   Bullwhip        NaT
  
      Keep only the rows with at least 2 non-NA values.
  
      >>> df.dropna(thresh=2).execute()
             name        toy       born
      1    Batman  Batmobile 1940-04-25
      2  Catwoman   Bullwhip        NaT
  
      Define in which columns to look for missing values.
  
      >>> df.dropna(subset=['name', 'born']).execute()
             name        toy       born
      1    Batman  Batmobile 1940-04-25
  
      Keep the DataFrame with valid entries in the same variable.
  
      >>> df.dropna(inplace=True)
      >>> df.execute()
           name        toy       born
      1  Batman  Batmobile 1940-04-25
      """
      axis = validate_axis(axis, df)
      if axis != 0:
          raise NotImplementedError(
              "Does not support dropna on DataFrame when axis=1"
          )
      if (
          _drop_na_enable_no_default
          and (how is not no_default)
          and (thresh is not no_default)
      ):
          raise TypeError(
              "You cannot set both the how and thresh arguments at the same time."
          )
      if thresh is no_default and how is no_default:
          how = "any"
  
      use_inf_as_na = options.dataframe.mode.use_inf_as_na
      op = DataFrameDropNA(
          axis=axis,
          how=how,
          thresh=thresh,
          subset=subset,
          output_types=[OutputType.dataframe],
          use_inf_as_na=use_inf_as_na,
      )
      out_df = op(df)
      if inplace:
          df.data = out_df.data
      else:
          return out_df
  
imports: import itertools
  import numpy
  import pandas
  from ...None import opcodes
  from ...core import OutputType, recursive_tile
  from ...config import options
  from ...serialization.serializables import AnyField, BoolField, StringField, Int32Field
  from ...utils import no_default, pd_release_version
  from ..align import align_dataframe_series
  from ..operands import DataFrameOperand, DataFrameOperandMixin
  from ..utils import parse_index, validate_axis
label_desc: Use image node_id 1 for calling a global function with example usage: df_dropna(df, axis, how, thresh, subset, inplace) and returns: out_df