class Charty::TableAdapters::PandasDataFrameAdapter

Attributes

data[R]

Public Class Methods

new(data, columns: nil, index: nil) click to toggle source
# File lib/charty/table_adapters/pandas_adapter.rb, line 15
def initialize(data, columns: nil, index: nil)
  @data = check_type(Pandas::DataFrame, data, :data)

  self.columns = columns unless columns.nil?
  self.index = index unless index.nil?
end
supported?(data) click to toggle source
# File lib/charty/table_adapters/pandas_adapter.rb, line 11
def self.supported?(data)
  defined?(Pandas::DataFrame) && data.is_a?(Pandas::DataFrame)
end

Public Instance Methods

[](row, column) click to toggle source
# File lib/charty/table_adapters/pandas_adapter.rb, line 79
def [](row, column)
  if row
    @data[column][row]
  else
    case column
    when Array
      Table.new(@data[column])
    else
      Vector.new(@data[column])
    end
  end
end
[]=(key, values) click to toggle source
# File lib/charty/table_adapters/pandas_adapter.rb, line 92
def []=(key, values)
  case values
  when Charty::Vector
    case values.adapter
    when Charty::VectorAdapters::PandasSeriesAdapter
      @data[key] = values.adapter.data
    else
      @data[key] = values.to_a
    end
  else
    orig_values = values
    values = Array.try_convert(values)
    if values.nil?
      raise ArgumentError, "`values` must be convertible to Array"
    end
    @data[key] = values
  end
  return values
end
column?(name) click to toggle source
# File lib/charty/table_adapters/pandas_adapter.rb, line 45
def column?(name)
  data.__contains__(name)
end
column_names() click to toggle source
# File lib/charty/table_adapters/pandas_adapter.rb, line 66
def column_names
  @data.columns.to_a
end
columns() click to toggle source
# File lib/charty/table_adapters/pandas_adapter.rb, line 28
def columns
  PandasIndex.new(data.columns)
end
columns=(new_columns) click to toggle source
# File lib/charty/table_adapters/pandas_adapter.rb, line 32
def columns=(new_columns)
  case new_columns
  when PandasIndex
    data.columns = new_columns.values
    data.columns.name = new_columns.name
  when Index
    data.columns = new_columns.to_a
    data.columns.name = new_columns.name
  else
    data.columns = new_columns
  end
end
compare_data_equality(other) click to toggle source
# File lib/charty/table_adapters/pandas_adapter.rb, line 70
def compare_data_equality(other)
  case other
  when PandasDataFrameAdapter
    data.equals(other.data)
  else
    super
  end
end
drop_na() click to toggle source
# File lib/charty/table_adapters/pandas_adapter.rb, line 112
def drop_na
  Charty::Table.new(@data.dropna)
end
group_by(_table, grouper, sort, drop_na) click to toggle source
# File lib/charty/table_adapters/pandas_adapter.rb, line 125
def group_by(_table, grouper, sort, drop_na)
  GroupBy.new(@data.groupby(by: grouper, sort: sort, dropna: drop_na))
end
index() click to toggle source
# File lib/charty/table_adapters/pandas_adapter.rb, line 49
def index
  PandasIndex.new(data.index)
end
index=(new_index) click to toggle source
# File lib/charty/table_adapters/pandas_adapter.rb, line 53
def index=(new_index)
  case new_index
  when PandasIndex
    data.index = new_index.values
    data.index.name = new_index.name
  when Index
    data.index = new_index.to_a
    data.index.name = new_index.name
  else
    data.index = new_index
  end
end
length() click to toggle source
# File lib/charty/table_adapters/pandas_adapter.rb, line 24
def length
  data.shape[0]
end
melt(id_vars: nil, value_vars: nil, var_name: nil, value_name: :value) click to toggle source
# File lib/charty/table_adapters/pandas_adapter.rb, line 133
def melt(id_vars: nil, value_vars: nil, var_name: nil, value_name: :value)
  id_vars = check_melt_vars(id_vars, :id_vars) { nil }
  value_vars = check_melt_vars(value_vars, :value_vars) { nil }

  Charty::Table.new(data.melt(id_vars: id_vars, value_vars: value_vars,
                              var_name: var_name, value_name: value_name,
                              ignore_index: true))
end
reset_index() click to toggle source
# File lib/charty/table_adapters/pandas_adapter.rb, line 129
def reset_index
  Charty::Table.new(data.reset_index)
end
sort_values(by, na_position: :last) click to toggle source
# File lib/charty/table_adapters/pandas_adapter.rb, line 116
def sort_values(by, na_position: :last)
  Charty::Table.new(@data.sort_values(by, na_position: na_position, kind: :mergesort))
end

Private Instance Methods

check_type(type, data, name) click to toggle source
# File lib/charty/table_adapters/pandas_adapter.rb, line 120
        def check_type(type, data, name)
  return data if data.is_a?(type)
  raise TypeError, "#{name} must be a #{type}"
end