@@ -1365,7 +1365,7 @@ def opmethod(self, other):
1365
1365
elif not np .isscalar (other ):
1366
1366
raise TypeError ("unsupported operand type(s) for %s: '%s' "
1367
1367
"and '%s'" % (opname , type (self ), type (other )))
1368
- return LArray (super_method (self . data , other ), self .axes )
1368
+ return LArray (super_method (np . asarray ( self ) , other ), self .axes )
1369
1369
opmethod .__name__ = fullname
1370
1370
return opmethod
1371
1371
@@ -1411,7 +1411,7 @@ def _unaryop(opname):
1411
1411
super_method = getattr (np .ndarray , fullname )
1412
1412
1413
1413
def opmethod (self ):
1414
- return LArray (super_method (self . data ), self .axes )
1414
+ return LArray (super_method (np . asarray ( self ) ), self .axes )
1415
1415
opmethod .__name__ = fullname
1416
1416
return opmethod
1417
1417
@@ -1541,6 +1541,15 @@ def to_clipboard(self, *args, **kwargs):
1541
1541
def plot (self , * args , ** kwargs ):
1542
1542
self .df .plot (* args , ** kwargs )
1543
1543
1544
+ #XXX: one less indirection as we have all the info at this level?
1545
+ # @property
1546
+ # def shape(self):
1547
+ # return tuple(len(a) for a in self.axes)
1548
+ #
1549
+ # @property
1550
+ # def ndim(self):
1551
+ # return len(self.axes)
1552
+
1544
1553
@property
1545
1554
def shape (self ):
1546
1555
return self .data .shape
@@ -1565,7 +1574,7 @@ def __len__(self):
1565
1574
return len (self .data )
1566
1575
1567
1576
def __array__ (self , dtype = None ):
1568
- return self .data
1577
+ return np . asarray ( self .data )
1569
1578
1570
1579
__array_priority__ = 100
1571
1580
@@ -1658,6 +1667,31 @@ def __getitem__(self, key):
1658
1667
def __getattr__ (self , key ):
1659
1668
return getattr (self .df , key )
1660
1669
1670
+ @property
1671
+ def dtype (self ):
1672
+ # assumes df is homogeneous !
1673
+ return self .df .dtypes [0 ]
1674
+
1675
+ @property
1676
+ def ndim (self ):
1677
+ return self .df .index .nlevels + 1
1678
+
1679
+ @property
1680
+ def shape (self ):
1681
+ shape = [len (level ) for level in self .df .index .levels ]
1682
+ shape .append (len (self .df .columns ))
1683
+ return tuple (shape )
1684
+
1685
+ def copy (self ):
1686
+ return DataFrameWrapper (self .df .copy ())
1687
+
1688
+ # not caught by __getattr__?
1689
+ def __len__ (self ):
1690
+ return self .shape [0 ]
1691
+
1692
+ def __array__ (self , dtype = None ):
1693
+ return self .df .__array__ (dtype ).reshape (self .shape )
1694
+
1661
1695
1662
1696
#TODO: implement sort_columns
1663
1697
def df_aslarray2 (df , sort_rows = True , sort_columns = True , ** kwargs ):
0 commit comments