def _get_columns(self): if self.value is None: return [] indexes = self.indexes col_names = list(self.value.columns) if not self.hierarchical or len(indexes) == 1: col_names = indexes + col_names else: col_names = indexes[-1:] + col_names df = self.value.reset_index() if len(indexes) > 1 else self.value columns = [] for col in col_names: if col in df.columns: data = df[col] else: data = df.index col_kwargs = {} kind = data.dtype.kind if kind == 'i': formatter = NumberFormatter() editor = IntEditor() elif kind == 'f': formatter = NumberFormatter(format='0,0.0[00000]') editor = NumberEditor() elif isdatetime(data) or kind == 'M': formatter = DateFormatter(format='%Y-%m-%d %H:%M:%S') editor = DateEditor() else: formatter = StringFormatter() editor = StringEditor() if col in self.editors: editor = self.editors[col] if col in indexes or editor is None: editor = CellEditor() if col in self.formatters: formatter = self.formatters[col] if str(col) != col: self._renamed_cols[str(col)] = col if isinstance(self.widths, int): col_kwargs['width'] = self.widths elif str(col) in self.widths: col_kwargs['width'] = self.widths.get(str(col)) title = str(col) if col in indexes and len(indexes) > 1 and self.hierarchical: title = 'Index: %s' % ' | '.join(indexes) column = TableColumn(field=str(col), title=title, editor=editor, formatter=formatter, **col_kwargs) columns.append(column) return columns
def _get_column_definitions(self, col_names, df): import pandas as pd indexes = self.indexes columns = [] for col in col_names: if col in df.columns: data = df[col] else: data = df.index if isinstance(data, pd.DataFrame): raise ValueError("DataFrame contains duplicate column names.") col_kwargs = {} kind = data.dtype.kind if kind == 'i': formatter = NumberFormatter() editor = IntEditor() elif kind == 'b': formatter = StringFormatter() editor = CheckboxEditor() elif kind == 'f': formatter = NumberFormatter(format='0,0.0[00000]') editor = NumberEditor() elif isdatetime(data) or kind == 'M': if len(data) and isinstance(data.values[0], dt.date): date_format = '%Y-%m-%d' else: date_format = '%Y-%m-%d %H:%M:%S' formatter = DateFormatter(format=date_format) editor = DateEditor() else: formatter = StringFormatter() editor = StringEditor() if col in self.editors and not isinstance(self.editors[col], (dict, str)): editor = self.editors[col] if col in indexes or editor is None: editor = CellEditor() if col in self.formatters and not isinstance( self.formatters[col], (dict, str)): formatter = self.formatters[col] if str(col) != col: self._renamed_cols[str(col)] = col if isinstance(self.widths, int): col_kwargs['width'] = self.widths elif str(col) in self.widths: col_kwargs['width'] = self.widths.get(str(col)) title = self.titles.get(col, str(col)) if col in indexes and len(indexes) > 1 and self.hierarchical: title = 'Index: %s' % ' | '.join(indexes) column = TableColumn(field=str(col), title=title, editor=editor, formatter=formatter, **col_kwargs) columns.append(column) return columns