133 lines
4.1 KiB
Python
133 lines
4.1 KiB
Python
#########################################################
|
||
## @file : mtable.py
|
||
## @desc : pandas is to large,
|
||
## so i implement a simple table data structure
|
||
## by my self
|
||
## @create : 2020/06/25
|
||
## @author : Chengan
|
||
## @email : douboer@gmail.com
|
||
#########################################################
|
||
|
||
class mTable():
|
||
|
||
def __init__(self, data=[], index=[], columns=[]):
|
||
self._data = data
|
||
self._index = index
|
||
self._columns = columns
|
||
self._width = 10
|
||
|
||
def dataframe(self, data=[], index=[], columns=[]):
|
||
self._data = data
|
||
self._index = index
|
||
self._columns = columns
|
||
|
||
def get_iat(self, row: int, column: int):
|
||
""" just like pandas iat"""
|
||
return self._data[row][column] if len(self._data)>0 else None
|
||
|
||
def get_num_rows(self):
|
||
return len(self._data) if len(self._data)>0 else 0
|
||
|
||
def get_num_columns(self):
|
||
return len(self._columns) if len(self._columns)>0 else 0
|
||
|
||
def reverse(self):
|
||
self._data.reverse()
|
||
|
||
def set_data(self, data=[]):
|
||
""" get table content"""
|
||
self._data = data
|
||
|
||
def get_data(self):
|
||
""" get table content"""
|
||
return self._data
|
||
|
||
def get_index(self):
|
||
""" just like pandas index"""
|
||
return self._index
|
||
|
||
def get_columns(self):
|
||
""" just like pandas columns"""
|
||
return self._columns
|
||
|
||
def set_repr_width(self, width):
|
||
self._width = width
|
||
|
||
def __repr__(self):
|
||
""" print table """
|
||
w = self._width
|
||
s = ''.ljust(w-1,' ')
|
||
for c in self._columns: s += c.ljust(w,' ')
|
||
s += '\n'
|
||
len_index = len(self._index)
|
||
for i, r in enumerate(self._data):
|
||
s += self._index[i].ljust(w,' ') if i<len_index else str(i).ljust(w,' ')
|
||
for c in r:
|
||
s += str(c).ljust(w,' ')
|
||
s += '\n'
|
||
return s
|
||
|
||
def __next__(self):
|
||
# self.a就是当前要迭代的值
|
||
result = self.a
|
||
# 计算斐波那契数列的下一个值,并将a变成原来的b,将b变成下一个值
|
||
self.a, self.b = self.b, self.a + self.b
|
||
# 返回当前迭代的值
|
||
return result
|
||
|
||
def __iter__(self):
|
||
return self
|
||
|
||
if __name__=='__main__':
|
||
|
||
"""
|
||
# move to unitest.kman.py
|
||
print('\n---------------------')
|
||
data = [['Ohiox','Ohio','Ohio','Nevada','Nevada'],
|
||
[2000,2001,2002,2001,2002],
|
||
[1.5,1.7,3.6,2.4,2.9],
|
||
[1.5,1.7,3.6,2.4,2.9],
|
||
]
|
||
|
||
mt = mTable(data,
|
||
index = ['one', 'two','three','four','five'],
|
||
columns = ['year','state','pop','debt','xx'])
|
||
|
||
print('== frame\n', mt)
|
||
print('== frame.iat[0, 0]\n', mt.get_iat(0, 0))
|
||
print('== frame.iat[1, 1]\n', mt.get_iat(1, 1))
|
||
print('== frame.iat[2, 2]\n', mt.get_iat(2, 2))
|
||
print('== frame.iat[2, 1]\n', mt.get_iat(2, 1))
|
||
print('== frame.shape[0]\n', mt.get_num_rows())
|
||
print('== frame.shape[1]\n', mt.get_num_columns())
|
||
print('== frame.columns\n', mt.get_columns())
|
||
print('== frame.index\n', mt.get_index())
|
||
|
||
mt = mTable(data,
|
||
columns = ['year','state','pop','debt','xx'])
|
||
print('== frame\n', mt)
|
||
print('== frame.iat[2, 1]\n', mt.get_iat(2, 1))
|
||
print('== frame.shape[0]\n', mt.get_num_rows())
|
||
print('== frame.shape[1]\n', mt.get_num_columns())
|
||
print('== frame.columns\n', mt.get_columns())
|
||
print('== frame.index\n', mt.get_index())
|
||
|
||
mt = mTable(data)
|
||
mt.set_repr_width(20)
|
||
print('== frame\n', mt)
|
||
print('== frame.iat[2, 1]\n', mt.get_iat(2, 1))
|
||
print('== frame.shape[0]\n', mt.get_num_rows())
|
||
print('== frame.shape[1]\n', mt.get_num_columns())
|
||
print('== frame.columns\n', mt.get_columns())
|
||
print('== frame.index\n', mt.get_index())
|
||
|
||
mt = mTable()
|
||
print('== frame\n', mt)
|
||
print('== frame.iat[2, 1]\n', mt.get_iat(2, 1))
|
||
print('== frame.shape[0]\n', mt.get_num_rows())
|
||
print('== frame.shape[1]\n', mt.get_num_columns())
|
||
print('== frame.columns\n', mt.get_columns())
|
||
print('== frame.index\n', mt.get_index())
|
||
"""
|
||
pass
|