class_docstr: GFrame is similar to SFrame but is associated with an SGraph.
  
  - GFrame can be obtained from either the `vertices` or `edges`
  attributed in any SGraph:
  
  >>> import turicreate
  >>> g = turicreate.load_sgraph(...)
  >>> vertices_gf = g.vertices
  >>> edges_gf = g.edges
  
  - GFrame has the same API as SFrame:
  
  >>> sa = vertices_gf['pagerank']
  
  >>> # column lambda transform
  >>> vertices_gf['pagerank'] = vertices_gf['pagerank'].apply(lambda x: 0.15 + 0.85 * x)
  
  >>> # frame lambda transform
  >>> vertices_gf['score'] = vertices_gf.apply(lambda x: 0.2 * x['triangle_count'] + 0.8 * x['pagerank'])
  
  >>> del vertices_gf['pagerank']
  
  - GFrame can be converted to SFrame:
  
  >>> # extract an SFrame
  >>> sf = vertices_gf.__to_sframe__()
class_docstr_tok: ["GFrame","is","similar","to","SFrame","but","is","associated","with","an","SGraph",".","-","GFrame","can","be","obtained","from","either","the","`","vertices","`","or","`","edges","`","attributed","in","any","SGraph",":",">",">",">","import","turicreate",">",">",">","g","=","turicreate.load_sgraph","(","...",")",">",">",">","vertices_gf","=","g.vertices",">",">",">","edges_gf","=","g.edges","-","GFrame","has","the","same","API","as","SFrame",":",">",">",">","sa","=","vertices_gf","[","'pagerank","'","]",">",">",">","#","column","lambda","transform",">",">",">","vertices_gf","[","'pagerank","'","]","=","vertices_gf","[","'pagerank","'","]",".apply","(","lambda","x",":","0.15","+","0.85","*","x",")",">",">",">","#","frame","lambda","transform",">",">",">","vertices_gf","[","'score","'","]","=","vertices_gf.apply","(","lambda","x",":","0.2","*","x","[","'triangle_count","'","]","+","0.8","*","x","[","'pagerank","'","]",")",">",">",">","del","vertices_gf","[","'pagerank","'","]","-","GFrame","can","be","converted","to","SFrame",":",">",">",">","#","extract","an","SFrame",">",">",">","sf","=","vertices_gf.__to_sframe__","(",")"]
docstr: Adds columns to the SFrame.  The number of elements in all columns must
  match every other column of the SFrame.
  
  If inplace == False (default) this operation does not modify the
  current SFrame, returning a new SFrame.
  
  If inplace == True, this operation modifies the current
  SFrame, returning self.
  
  Parameters
  ----------
  data : list[SArray] or SFrame
      The columns to add.
  
  column_names: list of string, optional
      A list of column names. All names must be specified. ``column_names`` is
      ignored if data is an SFrame.
  
  inplace : bool, optional. Defaults to False.
      Whether the SFrame is modified in place.
docstr_tok: ["Adds","columns","to","the","SFrame",".","The","number","of","elements","in","all","columns","must","match","every","other","column","of","the","SFrame",".","If","inplace","==","False","(","default",")","this","operation","does","not","modify","the","current","SFrame",",","returning","a","new","SFrame",".","If","inplace","==","True",",","this","operation","modifies","the","current","SFrame",",","returning","self",".","Parameters","--","--","--","--","--","data",":","list","[","SArray","]","or","SFrame","The","columns","to","add",".","column_names",":","list","of","string",",","optional","A","list","of","column","names",".","All","names","must","be","specified",".","``","column_names","``","is","ignored","if","data","is","an","SFrame",".","inplace",":","bool",",","optional",".","Defaults","to","False",".","Whether","the","SFrame","is","modified","in","place","."]
code: def add_columns(self, data, column_names=None, inplace=False):
      """
      Adds columns to the SFrame.  The number of elements in all columns must
      match every other column of the SFrame.
  
      If inplace == False (default) this operation does not modify the
      current SFrame, returning a new SFrame.
  
      If inplace == True, this operation modifies the current
      SFrame, returning self.
  
      Parameters
      ----------
      data : list[SArray] or SFrame
          The columns to add.
  
      column_names: list of string, optional
          A list of column names. All names must be specified. ``column_names`` is
          ignored if data is an SFrame.
  
      inplace : bool, optional. Defaults to False.
          Whether the SFrame is modified in place.
      """
  
      datalist = data
      if isinstance(data, SFrame):
          other = data
          datalist = [
              other.select_column(name) for name in other.column_names()
          ]
          column_names = other.column_names()
  
          my_columns = set(self.column_names())
          for name in column_names:
              if name in my_columns:
                  raise ValueError(
                      "Column '"
                      + name
                      + "' already exists in current SFrame"
                  )
      else:
          if not _is_non_string_iterable(datalist):
              raise TypeError("datalist must be an iterable")
          if not _is_non_string_iterable(column_names):
              raise TypeError("column_names must be an iterable")
  
          if not all([isinstance(x, SArray) for x in datalist]):
              raise TypeError("Must give column as SArray")
          if not all([isinstance(x, str) for x in column_names]):
              raise TypeError(
                  "Invalid column name in list : must all be str"
              )
  
      if inplace:
          for data, name in zip(datalist, column_names):
              self.add_column(data, name)
          return self
      else:
          return super(GFrame, self).add_column(
              datalist, column_names, inplace=inplace
          )
  
imports: from __future__ import print_function
  from __future__ import division
  from __future__ import absolute_import
  from .sframe import SFrame
  from .._cython.context import debug_trace
  from ..util import _is_non_string_iterable
  from .sarray import SArray, _create_sequential_sarray
  import copy
label_desc: Use image node_id 4 for calling the GFrame obj's underlying member method code with example usage: obj.add_columns(data, column_names, inplace) and returns: self, super