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
Calls superclass method
Charty::TableAdapters::BaseAdapter#compare_data_equality
# 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