In [1]:
import pandas as pd

In [43]:
class Table(pd.DataFrame):
    
    _internal_names = pd.DataFrame._internal_names + ['tablename','filename']
    _internal_names_set = set(_internal_names)
    
    _metadata = ['dsname']
    
    def __init__(self,*args,**kwargs):
        dsname = kwargs.pop('dsname',None)
        tablename = kwargs.pop('tablename',None)
        filename = kwargs.pop('filename',None)
        super(self.__class__,self).__init__(*args,**kwargs)
        self.dsname = dsname
        self.tablename = tablename
        self.filename = filename
        
    @property
    def _constructor(self):
        return self.__class__

In [44]:
t = Table([(1,2),(3,4),(5,6)],columns=['A','B'],dsname='foo',tablename='bar')
t


Out[44]:
A B
0 1 2
1 3 4
2 5 6

In [45]:
type(t)


Out[45]:
__main__.Table

In [46]:
s = t*3
s


Out[46]:
A B
0 3 6
1 9 12
2 15 18

In [47]:
type(s)


Out[47]:
__main__.Table

In [48]:
vars(s)


Out[48]:
{'_data': BlockManager
 Items: Index([u'A', u'B'], dtype='object')
 Axis 1: RangeIndex(start=0, stop=3, step=1)
 IntBlock: slice(0, 2, 1), 2 x 3, dtype: int64,
 '_iloc': <pandas.core.indexing._iLocIndexer at 0x7f2d8a3a9310>,
 '_item_cache': {},
 'dsname': None,
 'filename': None,
 'is_copy': None,
 'tablename': None}

In [49]:
u = t+s

In [50]:
type(u)


Out[50]:
__main__.Table

In [51]:
vars(u)


Out[51]:
{'_data': BlockManager
 Items: Index([u'A', u'B'], dtype='object')
 Axis 1: RangeIndex(start=0, stop=3, step=1)
 IntBlock: slice(0, 2, 1), 2 x 3, dtype: int64,
 '_item_cache': {},
 'dsname': None,
 'filename': None,
 'is_copy': None,
 'tablename': None}

In [52]:
v = t[['A']]
v


Out[52]:
A
0 1
1 3
2 5

In [53]:
type(v)


Out[53]:
__main__.Table

In [54]:
w = t
w['C'] = [10,20,30]
w


Out[54]:
A B C
0 1 2 10
1 3 4 20
2 5 6 30

In [55]:
type(w)


Out[55]:
__main__.Table

In [56]:
vars(w)


Out[56]:
{'_data': BlockManager
 Items: Index([u'A', u'B', u'C'], dtype='object')
 Axis 1: RangeIndex(start=0, stop=3, step=1)
 IntBlock: slice(0, 2, 1), 2 x 3, dtype: int64
 IntBlock: slice(2, 3, 1), 1 x 3, dtype: int64,
 '_iloc': <pandas.core.indexing._iLocIndexer at 0x7f2d8a3a9b10>,
 '_item_cache': {},
 '_ix': <pandas.core.indexing._IXIndexer at 0x7f2d8a3a9d50>,
 'dsname': 'foo',
 'filename': None,
 'is_copy': None,
 'tablename': 'bar'}

In [57]:
t


Out[57]:
A B C
0 1 2 10
1 3 4 20
2 5 6 30

In [58]:
t.dsname


Out[58]:
'foo'

In [59]:
t.tablename


Out[59]:
'bar'

In [60]:
t[['B','C']].dsname


Out[60]:
'foo'

In [61]:
t[['B','C']].tablename

In [64]:
t.tablename


Out[64]:
'bar'

In [65]:
Table()


Out[65]:

In [66]:
t


Out[66]:
A B C
0 1 2 10
1 3 4 20
2 5 6 30

In [69]:
t.index.values.tolist()


Out[69]:
[0, 1, 2]

In [ ]: