@@ -1601,6 +1601,73 @@ def test_constructor_maskedarray(self):
1601
1601
frame = DataFrame (ma .masked_all ((3 , 0 )))
1602
1602
self .assert_ (len (frame .columns ) == 0 )
1603
1603
1604
+ def test_constructor_maskedarray_nonfloat (self ):
1605
+ # masked int promoted to float
1606
+ mat = ma .masked_all ((2 , 3 ), dtype = int )
1607
+ # 2-D input
1608
+ frame = DataFrame (mat , columns = ['A' , 'B' , 'C' ], index = [1 , 2 ])
1609
+
1610
+ self .assertEqual (len (frame .index ), 2 )
1611
+ self .assertEqual (len (frame .columns ), 3 )
1612
+ self .assertTrue (np .all (~ np .asarray (frame == frame )))
1613
+
1614
+ # cast type
1615
+ frame = DataFrame (mat , columns = ['A' , 'B' , 'C' ],
1616
+ index = [1 , 2 ], dtype = float )
1617
+ self .assert_ (frame .values .dtype == np .float64 )
1618
+
1619
+ # Check non-masked values
1620
+ mat2 = ma .copy (mat )
1621
+ mat2 [0 ,0 ] = 1
1622
+ mat2 [1 ,2 ] = 2
1623
+ frame = DataFrame (mat2 , columns = ['A' , 'B' , 'C' ], index = [1 , 2 ])
1624
+ self .assertEqual (1 , frame ['A' ][1 ])
1625
+ self .assertEqual (2 , frame ['C' ][2 ])
1626
+
1627
+ # masked np.datetime64 stays (use lib.NaT as null)
1628
+ mat = ma .masked_all ((2 , 3 ), dtype = np .datetime64 )
1629
+ # 2-D input
1630
+ frame = DataFrame (mat , columns = ['A' , 'B' , 'C' ], index = [1 , 2 ])
1631
+
1632
+ self .assertEqual (len (frame .index ), 2 )
1633
+ self .assertEqual (len (frame .columns ), 3 )
1634
+ self .assertTrue (isnull (frame ).values .all ())
1635
+
1636
+ # cast type
1637
+ frame = DataFrame (mat , columns = ['A' , 'B' , 'C' ],
1638
+ index = [1 , 2 ], dtype = int )
1639
+ self .assert_ (frame .values .dtype == int )
1640
+
1641
+ # Check non-masked values
1642
+ mat2 = ma .copy (mat )
1643
+ mat2 [0 ,0 ] = 1
1644
+ mat2 [1 ,2 ] = 2
1645
+ frame = DataFrame (mat2 , columns = ['A' , 'B' , 'C' ], index = [1 , 2 ])
1646
+ self .assertEqual (1 , frame ['A' ].view ('i8' )[1 ])
1647
+ self .assertEqual (2 , frame ['C' ].view ('i8' )[2 ])
1648
+
1649
+ # masked bool promoted to object
1650
+ mat = ma .masked_all ((2 , 3 ), dtype = bool )
1651
+ # 2-D input
1652
+ frame = DataFrame (mat , columns = ['A' , 'B' , 'C' ], index = [1 , 2 ])
1653
+
1654
+ self .assertEqual (len (frame .index ), 2 )
1655
+ self .assertEqual (len (frame .columns ), 3 )
1656
+ self .assertTrue (np .all (~ np .asarray (frame == frame )))
1657
+
1658
+ # cast type
1659
+ frame = DataFrame (mat , columns = ['A' , 'B' , 'C' ],
1660
+ index = [1 , 2 ], dtype = object )
1661
+ self .assert_ (frame .values .dtype == object )
1662
+
1663
+ # Check non-masked values
1664
+ mat2 = ma .copy (mat )
1665
+ mat2 [0 ,0 ] = True
1666
+ mat2 [1 ,2 ] = False
1667
+ frame = DataFrame (mat2 , columns = ['A' , 'B' , 'C' ], index = [1 , 2 ])
1668
+ self .assertEqual (True , frame ['A' ][1 ])
1669
+ self .assertEqual (False , frame ['C' ][2 ])
1670
+
1604
1671
def test_constructor_corner (self ):
1605
1672
df = DataFrame (index = [])
1606
1673
self .assertEqual (df .values .shape , (0 , 0 ))
0 commit comments