|
10 | 10 | from numpy import random, nan
|
11 | 11 | from numpy.random import randn
|
12 | 12 | import numpy as np
|
| 13 | +import numpy.ma as ma |
13 | 14 |
|
14 | 15 | import pandas.core.common as common
|
15 | 16 | import pandas.core.datetools as datetools
|
@@ -1040,6 +1041,64 @@ def test_constructor_ndarray(self):
|
1040 | 1041 | frame = DataFrame(np.empty((3, 0)))
|
1041 | 1042 | self.assert_(len(frame.columns) == 0)
|
1042 | 1043 |
|
| 1044 | + def test_constructor_maskedarray(self): |
| 1045 | + mat = ma.masked_all((2, 3), dtype=float) |
| 1046 | + |
| 1047 | + # 2-D input |
| 1048 | + frame = DataFrame(mat, columns=['A', 'B', 'C'], index=[1, 2]) |
| 1049 | + |
| 1050 | + self.assertEqual(len(frame.index), 2) |
| 1051 | + self.assertEqual(len(frame.columns), 3) |
| 1052 | + self.assertTrue(np.all(~np.asarray(frame == frame))) |
| 1053 | + |
| 1054 | + # cast type |
| 1055 | + frame = DataFrame(mat, columns=['A', 'B', 'C'], |
| 1056 | + index=[1, 2], dtype=int) |
| 1057 | + self.assert_(frame.values.dtype == np.int64) |
| 1058 | + |
| 1059 | + # Check non-masked values |
| 1060 | + mat2 = ma.copy(mat) |
| 1061 | + mat2[0,0] = 1.0 |
| 1062 | + mat2[1,2] = 2.0 |
| 1063 | + frame = DataFrame(mat2, columns=['A', 'B', 'C'], index=[1, 2]) |
| 1064 | + self.assertEqual(1.0, frame['A'][1]) |
| 1065 | + self.assertEqual(2.0, frame['C'][2]) |
| 1066 | + |
| 1067 | + # 1-D input |
| 1068 | + frame = DataFrame(ma.masked_all((3,)), columns=['A'], index=[1, 2, 3]) |
| 1069 | + self.assertEqual(len(frame.index), 3) |
| 1070 | + self.assertEqual(len(frame.columns), 1) |
| 1071 | + self.assertTrue(np.all(~np.asarray(frame == frame))) |
| 1072 | + |
| 1073 | + # higher dim raise exception |
| 1074 | + self.assertRaises(Exception, DataFrame, ma.masked_all((3, 3, 3)), |
| 1075 | + columns=['A', 'B', 'C'], index=[1]) |
| 1076 | + |
| 1077 | + # wrong size axis labels |
| 1078 | + self.assertRaises(Exception, DataFrame, mat, |
| 1079 | + columns=['A', 'B', 'C'], index=[1]) |
| 1080 | + |
| 1081 | + self.assertRaises(Exception, DataFrame, mat, |
| 1082 | + columns=['A', 'B'], index=[1, 2]) |
| 1083 | + |
| 1084 | + # automatic labeling |
| 1085 | + frame = DataFrame(mat) |
| 1086 | + self.assert_(np.array_equal(frame.index, range(2))) |
| 1087 | + self.assert_(np.array_equal(frame.columns, range(3))) |
| 1088 | + |
| 1089 | + frame = DataFrame(mat, index=[1, 2]) |
| 1090 | + self.assert_(np.array_equal(frame.columns, range(3))) |
| 1091 | + |
| 1092 | + frame = DataFrame(mat, columns=['A', 'B', 'C']) |
| 1093 | + self.assert_(np.array_equal(frame.index, range(2))) |
| 1094 | + |
| 1095 | + # 0-length axis |
| 1096 | + frame = DataFrame(ma.masked_all((0, 3))) |
| 1097 | + self.assert_(frame.index is NULL_INDEX) |
| 1098 | + |
| 1099 | + frame = DataFrame(ma.masked_all((3, 0))) |
| 1100 | + self.assert_(len(frame.columns) == 0) |
| 1101 | + |
1043 | 1102 | def test_constructor_corner(self):
|
1044 | 1103 | df = DataFrame(index=[])
|
1045 | 1104 | self.assertEqual(df.values.shape, (0, 0))
|
|
0 commit comments