'Create a `Table` from a :class:`pandas.DataFrame` instance
Parameters
dataframe : :class:`pandas.DataFrame`
The pandas :class:`pandas.DataFrame` instance
Returns
table : `Table`
A `Table` (or subclass) instance'

@classmethod
def from_pandas(cls, dataframe):

    out = OrderedDict()
    for name in dataframe.columns:
        column = dataframe[name]
        mask = np.array(column.isnull())
        data = np.array(column)
        if (data.dtype.kind == u'O'):
            string_types = six.string_types
            if (not six.PY2):
                string_types += (bytes,)
            nan = np.nan
            if all(((isinstance(x, string_types) or (x is nan)) for x in data)):
                data[mask] = ''
                data = np.array([x for x in data])
        if np.any(mask):
            out[name] = MaskedColumn(data=data, name=name, mask=mask)
        else:
            out[name] = Column(data=data, name=name)
    return cls(out)
